Map de taille infini (ou presque) : tuto tiles 4

Soyez le premier à donner votre avis sur cette source.

Vue 7 647 fois - Téléchargée 825 fois

Description

Pour ce petit tutorial je vais partir de la méthode d?affichage indirecte seulement je vais intégrés la gestion de carte qui dépasse la taille de l?écran (en pixel). Ici j?utiliserai un écran de taille 800*600 en 32 bits, ainsi que DirectDraw, et DirectInput dans leur version 7, ce qui inclus que vous ayez lu mes précédents tutoriaux pour avoir une compréhension parfaite de cette explication.

Source / Exemple :


J?ai quelque peux modifier le code de chargement de la matrice  et de l?application des tiles sur la surface de fond, je vais donc redonner les fonctions, en effet les précédentes posséder des bugs.

'Creation d'une surface vierge de la taille maximal
ddsdBackGround.lFlags = DDSD_CAPS Or DDSD_WIDTH Or DDSD_HEIGHT
ddsdBackGround.ddscaps.lCaps = DDSCAPS_VIDEOMEMORY
ddsdBackGround.lHeight = (UBound(Map, 2) + 1) * 32
ddsdBackGround.lWidth = (UBound(Map, 1)) * 32
Set BackGround = dd.CreateSurface(ddsdBackGround)
Dim x As Integer, y As Integer
'Méthode d'affichage direct mais apppliqué sur la surface vierge
        For x = 0 To UBound(Map, 1)
            For y = 0 To UBound(Map, 2)
                BackGround.BltFast x * 32, y * 32, Tiles(Map(x, y)), ddRect(0, 0, 0, 0), DDBLTFAST_WAIT
            Next y
        Next x

Ce code a été modifié, la largeur et la hauteur de la carte ne fond plus 800 * 600 mais la taille de la matrice charger au par avant bien sur.

Maintenant je vous présente les nouvelles variables :

Public X1Map As Long
Public X2Map As Long
Public Y1Map As Long
Public Y2Map As Long

Ce sera les coordonnées du rectangle source qui sera prélevé de Background pour afficher à l?écran.
L?initialisation de celles-ci doit être impérativement avant la boucle d?affichage.

X1Map = 0
X2Map = 800
Y1Map = 0
Y2Map = 600
Donc un rectangle de 800*600

Maintenant nouveau type d?affichage de la surface :

Backbuffer.Blt ddRect(0, 0, 800, 600), BackGround, ddRect(X1Map, Y1Map, X2Map, Y2Map), DDBLT_WAIT
On utilise un Blt pour pouvoir choisir le rectangle source et le rectangle de destination, en effet le BltFast ne permet pas de choisir le rectangle source.

Une petite fonction de plus avec DirectInput, je ne donne pas la déclaration de DirectInput car j?ai rédigé un tutorial exprès sur cela.

Public Function Deplacement()

    DIdevice.GetDeviceStateKeyboard DIstate
    
    If DIstate.Key(DIK_UP) And (Y1Map - 32) >= 0 Then
            Y1Map = Y1Map - 32
            Y2Map = Y2Map - 32
    ElseIf DIstate.Key(DIK_DOWN) And (Y2Map + 32) <= (((UBound(Map, 2) + 1) * 32)) Then
            Y1Map = Y1Map + 32
            Y2Map = Y2Map + 32
    ElseIf DIstate.Key(DIK_LEFT) And (X1Map - 32) >= 0 Then
            X1Map = X1Map - 32
            X2Map = X2Map - 32
    ElseIf DIstate.Key(DIK_RIGHT) And (X2Map + 32) <= (UBound(Map, 1) * 32) Then
            X1Map = X1Map + 32
            X2Map = X2Map + 32
    End If
End Function

Cette fonction doit être appelé dans la boucle d?affichage.
Le code est très simple, les condition du type (Y2Map + 32) <= (((UBound(Map, 2) + 1) * 32)) permette de ne pas sortir de la surface Background, donc de la map.

Conclusion :


Pour mieux comprendre ce tutorial je vous propose un exemple, qui utilise une map faite par Simon22, que je remercie beaucoup surtout que sa map est d?une bonne qualité pour un simple exemple.

Je pense développer mes prochains tuto sur les matrices de collisions et sur l?utilisation d?une matrice de tile pour ne plus avoir 100 milles fichiers par map.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_The_Wolf
Messages postés
3
Date d'inscription
mercredi 26 janvier 2005
Statut
Membre
Dernière intervention
25 avril 2006
-
Salut, bon, j'ai peut être mal regardé. Mais j'aimerais savoir si il y aurait moyens d'avoir un zip avec tout les tutos que vous avez créé.

En faite, je connais assez bien VB mais j'aimerais apprendre la programmation avec DirectX 9, mais tout les codes que j'ai trouvé actuellement sont en C++ ou ne possède pas assé de commentaires, donc, pas possible de comprendre exactement comment cela marche.

J'ai aussi une autre petite question: j'aimerais savoir où je pourrais trouver un site avec les correspondances entre VB6 et la nouvelle version VB.Net ?

Merci de vos futures réponces, et bonne programmation ;)
ciberrique
Messages postés
591
Date d'inscription
lundi 25 août 2003
Statut
Membre
Dernière intervention
18 juillet 2010
-
Bonjours, pour la question du zip, il y en a un pour chaques tutos sur ce site, ensuite directx9 c'est que sur vb.net pas sur vb6, pour les correspondances je ne les connais pas, mais je pense que la msdn (de microsoft) doit pouvoir vous aider. Je pense que l'utilisation de c++ dans un jeu n'est pas forcement necessaire, cependant c++ est souvent plus rapide que vb, meme si dx ne regarde pas ça.

Enfin sur mon site qui est actuellement en cours d'evolution, vous pourrez trouver plus de tuto et d'expliquation qu'ici. (www.ciberfitz.fr.st)

J'espere avoir répondu comme vous le souhaitiez, si d'autre question vous avez ne pas hésité a les poser il faut (yoda).
cs_The_Wolf
Messages postés
3
Date d'inscription
mercredi 26 janvier 2005
Statut
Membre
Dernière intervention
25 avril 2006
-
Merci pour les informations, je vais mieux regarder sur le site et aller faire un tour sur votre site.

Merci encore ;)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.