Accueil > > > UTILISATION DE TILES DANS UN JEU : TUTO 2
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.
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
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@
|
Derniers Blogs
PRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGEPRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGE par richardc
http://www.c2idotnet.com/articles/presentation-des-api-rest-de-windows-azure-lister-les-comptes-de-storage
Désolé pour "toto", mais c2i existait avant blogs.developpeur.org et c'est mon site "officiel" ;-) ...
Cliquez pour lire la suite de l'article par richardc [HTML5] SLIDES ET DéMOS : AUTOUR DU W3C , NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] SLIDES ET DéMOS : AUTOUR DU W3C , NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Très bonne après-midi passée lors cette conférence avec le W3C, organisée par L' Inria sur les nouveaux standards, ce Mardi 14 Février, on sent vraiment que çà bosse au W3C, et l'avenir est très très prometteur pour le HTML5, notamment ...
Cliquez pour lire la suite de l'article par Gio GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|