|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
UTILISATION DE TILES DANS UN JEU : TUTO 2
Information sur la source
Description
Ce tuto va servir à expliquer la méthode d'affichage indirect. Il est plutot court, mais j'ai fait un tuto à part car il faut comprendre le fonctionnement de creation d'une surface vierge. Je considere donc vous avez lut au préalable mes tuto sur dx (l'affichage d'image et la declaration de dx) et le premier tuto sur les tiles.
Source
- La difference entre la methode direct et la méthode indirect est assé importante :
- Dans la methode directe a chaque passage dans la boucle tout les tiles sont affiches, dans la méthode indirecte on les affiches une seul fois donc l'affichage et plus leger.
-
- Nous reprennons tout l'ancien code jusqu'a ces quelques lignes :
- For i = 0 To UBound(Files)
- Set Tiles(i) = dd.CreateSurfaceFromFile(Path & Files(i), ddsdTiles(i))
- Next i
-
- La suite du code change.
-
- Alors, premierement il faut rajouter des variables :
- Public BackGround As DirectDrawSurface7
- Public ddsdBackGround As DDSURFACEDESC2
-
- Ensuite apres le Next i, nous allons creer une surface vierge sur laquelle nous poserons nos tiles.
-
- ddsdBackGround.lFlags = DDSD_CAPS Or DDSD_WIDTH Or DDSD_HEIGHT
- Ici on declare que notre surface utilise les caps (voir mes anciens tuto) et qu'on definira la largueur et la hauteur de la surface.
-
-
- ddsdBackGround.ddscaps.lCaps = DDSCAPS_VIDEOMEMORY
- On utilise ici la fonctionne de memoire de la surface, c est a dire que notre surface est mise directement en memoire (ram)
-
-
- Ici on donne la taille de la surface, celle ci se deduit naturellemnet des dimension de Map
- ddsdBackGround.lHeight = UBound(Map, 2) * 32
- ddsdBackGround.lWidth = UBound(Map, 1) * 32
-
- Maintenant que le ddsd est totalement définis on peut enfin declarer BackGround comme surface.
- Set BackGround = dd.CreateSurface(ddsdBackGround)
-
- Il ne reste plus qu'a bltfast les tiles :
-
- For x = 0 To UBound(Map, 1)
- For y = 0 To UBound(Map, 2)
- Meme code que dans la méthode direct mais sur la surface
-
- BackGround.BltFast x * 32, y * 32, Tiles(Map(x, y)), ddRect(0, 0, 0, 0), DDBLTFAST_WAIT
- Next y
- Next x
-
- Maintenant dans la boucle d'affichage :
-
- Do
- Primary.Flip Nothing, DDFLIP_WAIT
-
- On blit simplement notre surface, suivant la taille de la carte on découpe bien entendu.
- If UBound(Map, 1) <= 25 And UBound(Map, 2) <= 18 Then
- Backbuffer.BltFast 0, 0, BackGround, ddRect(0, 0, (UBound(Map, 1) * 32), (UBound(Map, 2) * 32)), DDBLTFAST_WAIT
- ElseIf UBound(Map, 1) > 25 And UBound(Map, 2) < 18 Then
- Backbuffer.BltFast 0, 0, BackGround, ddRect(0, 0, 800, (UBound(Map, 2) * 32)), DDBLTFAST_WAIT
- ElseIf UBound(Map, 1) < 25 And UBound(Map, 2) > 18 Then
- Backbuffer.BltFast 0, 0, BackGround, ddRect(0, 0, (UBound(Map, 1) * 32), 600), DDBLTFAST_WAIT
- ElseIf UBound(Map, 1) > 25 And UBound(Map, 2) > 18 Then
- Backbuffer.BltFast 0, 0, BackGround, ddRect(0, 0, 800, 600), DDBLTFAST_WAIT
- End If
- DoEvents
-
- Loop Until bRunning = False
-
-
- Cette méthode à des avantages et des inconvenients, à vous de choisir votre préféré, et surtout de savoir quelle sera la puissance demandé par le jeu.
La difference entre la methode direct et la méthode indirect est assé importante :
Dans la methode directe a chaque passage dans la boucle tout les tiles sont affiches, dans la méthode indirecte on les affiches une seul fois donc l'affichage et plus leger.
Nous reprennons tout l'ancien code jusqu'a ces quelques lignes :
For i = 0 To UBound(Files)
Set Tiles(i) = dd.CreateSurfaceFromFile(Path & Files(i), ddsdTiles(i))
Next i
La suite du code change.
Alors, premierement il faut rajouter des variables :
Public BackGround As DirectDrawSurface7
Public ddsdBackGround As DDSURFACEDESC2
Ensuite apres le Next i, nous allons creer une surface vierge sur laquelle nous poserons nos tiles.
ddsdBackGround.lFlags = DDSD_CAPS Or DDSD_WIDTH Or DDSD_HEIGHT
Ici on declare que notre surface utilise les caps (voir mes anciens tuto) et qu'on definira la largueur et la hauteur de la surface.
ddsdBackGround.ddscaps.lCaps = DDSCAPS_VIDEOMEMORY
On utilise ici la fonctionne de memoire de la surface, c est a dire que notre surface est mise directement en memoire (ram)
Ici on donne la taille de la surface, celle ci se deduit naturellemnet des dimension de Map
ddsdBackGround.lHeight = UBound(Map, 2) * 32
ddsdBackGround.lWidth = UBound(Map, 1) * 32
Maintenant que le ddsd est totalement définis on peut enfin declarer BackGround comme surface.
Set BackGround = dd.CreateSurface(ddsdBackGround)
Il ne reste plus qu'a bltfast les tiles :
For x = 0 To UBound(Map, 1)
For y = 0 To UBound(Map, 2)
Meme code que dans la méthode direct mais sur la surface
BackGround.BltFast x * 32, y * 32, Tiles(Map(x, y)), ddRect(0, 0, 0, 0), DDBLTFAST_WAIT
Next y
Next x
Maintenant dans la boucle d'affichage :
Do
Primary.Flip Nothing, DDFLIP_WAIT
On blit simplement notre surface, suivant la taille de la carte on découpe bien entendu.
If UBound(Map, 1) <= 25 And UBound(Map, 2) <= 18 Then
Backbuffer.BltFast 0, 0, BackGround, ddRect(0, 0, (UBound(Map, 1) * 32), (UBound(Map, 2) * 32)), DDBLTFAST_WAIT
ElseIf UBound(Map, 1) > 25 And UBound(Map, 2) < 18 Then
Backbuffer.BltFast 0, 0, BackGround, ddRect(0, 0, 800, (UBound(Map, 2) * 32)), DDBLTFAST_WAIT
ElseIf UBound(Map, 1) < 25 And UBound(Map, 2) > 18 Then
Backbuffer.BltFast 0, 0, BackGround, ddRect(0, 0, (UBound(Map, 1) * 32), 600), DDBLTFAST_WAIT
ElseIf UBound(Map, 1) > 25 And UBound(Map, 2) > 18 Then
Backbuffer.BltFast 0, 0, BackGround, ddRect(0, 0, 800, 600), DDBLTFAST_WAIT
End If
DoEvents
Loop Until bRunning = False
Cette méthode à des avantages et des inconvenients, à vous de choisir votre préféré, et surtout de savoir quelle sera la puissance demandé par le jeu.
Conclusion
A bug ??? il n'y en pas. Ensuite remerciement à Renfield il m'a passer un site ou j'ai pus retrouver la declaration de surface vierge (meme si sa n'y était pas reelement). Puis encore Simon pour les tiles de l'exemple.
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
Historique
- 25 avril 2005 13:15:34 :
- Amélioration du blit dans le backbuffer.
- 25 avril 2005 13:21:59 :
- Erreur dans une inégalitée, j'avais mis à la premiere :
If UBound(Map, 1) < 25 And UBound(Map, 2) < 18 Then
au lieu de
If UBound(Map, 1) <= 25 And UBound(Map, 2) <= 18 Then
donc sa buggé si on avait 18 ou 25. De plus j'ai remis dans l'ordre :
ElseIf UBound(Map, 1) < 25 And UBound(Map, 2) > 18 Then
c'était dans le sens inverse sa change rien pour le fonctionnement, c'est juste plus jolie.
- 20 février 2006 21:17:14 :
- J'ai ajouté les mots clés.
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Directdraw couleur transparente [ par dester ]
Bon j'ai comme un bleme.Voila je me suis dis : "hopla je me met a developper en directX"Et tout a coup ont surgis quelque problemes (loleu)Alors prem
DX 7 8 9 ??? [ par Stephane ]
Salut a tous voila, il y a quelques temps j'avais fait quelques jeux en DirectX7 qui utilisait DirectDraw Aujourd'hui, je me lance dans un nouveau j
vb6 - directX, directDraw, openGL,... [ par mstarsup5 ]
Bonjour,Je souhaiterais commencer à écrire des programmes en utilsant directX pour pouvoir faire des jeux plus rapides, mais j'aurais quelques questio
DirectDraw DirectX [ par CiscoFun ]
Bonjour,Voila je débute dans la programmation graphique et j'aimerais que quelqu'un me donne l'adresse d'un site (j'en ai deja testé plusieur mais rie
DirectX -> DirectDraw [ par ShadowMaster ]
Bonjour je vous explique mon probleme: j'aimerai savoir si il est possible de "prendre" la couleur d'un pixel dans une surface directDraw un truc du g
DirectDraw sous DirectX8 [ par nihaoma ]
Bonjour à tous,je me permet de poster ce message pour vous soumetre un petit probleme auquel je suis confronté: je suis en train de developper une pet
Scroll de Map dans un picture box [ par NickGen ]
Bonjour, J'ai un problême que je n'arrive pas à résoudre:Voila, je suis en train de programmer un éditeur de cartes pour un jeu de stratégie que je d
pb de scrolling 2D avec DirectDraw [ par DocteurVB ]
je voudrais savoir que faut-il faire pour pouvoir charger des surfaces plus grandes que l'écran quand on fait de la 2D avec DirectDraw...?merci...
directx rotation d'une image en 2d [ par smoron ]
Salut!j'affiche une image avec directx et j'aimerais pouvoir lui faire effectuer une rotation!j'ai cherché des codes mais en vain car tombant souvent
DirectX [ par Kazuya ]
Salut, je cherche un site qui apprendrai les bases pour faire un moteur 3D iso sous DDraw, si vous en conaissez plusieurs, c'est encore mieux, merciK@
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|