Page 1 of 1

[Axe] Problème lors de l'affichage d'une map simple

PostPosted: 20 Mar 2011, 18:59
by nikoladu49
Bonjour, j'ai commencé à créer mon premier jeu, mais je rencontre déjà des problèmes.
Ma map est composé de 2 sprites différents (l'un tout noir, l'autre tout blanc) mais seul le premier sprite s'affiche, et partout sur l'écran (c'est ce que j'ai remarqué après quelques tests).

Voici le code complet du programme :
Code: Select all
:.SURDSAIR
:
:[000F09FE7FE64870]→Pic0AV

:[0000000000000000]→Pic0M1
:[FFFFFFFFFFFFFFFF]
:
:[000000111111]→GDB0M1
:[000000111111]
:[000000111111]
:[000000000000]
:[000000000000]
:[000000111111]
:[000000111111]
:[000000111111]
:
:0→X
:56→Y
:
:ClrDraw
:sub(MAP,GDB0M1,Pic0M1
:
:Repeat getKey(15)
:   sub(TRN,1,(Y56),2
:   sub(TRN,4,(Y0),‾2
:   
:   Pause 1
:   X+1→X
:   
:   sub(PTC,Pic0AV
:   DispGraph
:   sub(PTC,Pic0AV
:   Pause 100
:End
:
:Return
:
:
:Lbl TRN
:If getKey(r1) and r2
:   Y+r3→Y
:End
:Return
:
:Lbl PTC
:Pt-Change(X,Y,r1
:Return
:
:Lbl MAP
:For(W,0,7
:   For(V,0,5
:      {W*6+X+r1}→A
:      Pt-On(V*16,W*8,A/16*8+r2
:      Pt-On(V*16+8,W*8,A^16*8+r2
:   End
:End
:DispGraph
:Return


Pouvez vous m'aider ?
Merci d'avance.

PS : sinon quelqu'un pourrait m'expliquer un peu les calculs pour afficher la map, car je n'ai pas tout compris sur le site du zéro, et j'ai surtout fait un copié-collé des calculs (mais je remercie l'auteur qui a fait un très bon tuto :#top#: ).

Re: [Axe] Problème lors de l'affichage d'une map simple

PostPosted: 20 Mar 2011, 20:10
by Wellen
si je ne m'abuse, ce code là :
Code: Select all
:sub(MAP,GDB0M1,Pic0M1

tu ne l'utilise qu'une fois pour le pointeur Pic0M1 donc pour ton premier sprite ( qui est composé de 2 octets )
Rajoute à la suite le même code, mais cette fois pour le pointeur Pic0M1+8, donc tu te déplace de 2 octets, ce qui pointe le deuxième sprite
Donc :
Code: Select all
:sub(MAP,GDB0M1,Pic0M1
:sub(MAP,GDB0M1,Pic0M1+8


Ce qui affiche la disposition des premiers sprites sur ton écran, puis des deuxièmes sprites.
De reste pour les calculs je ne me suis pas encore attaqué aux maps, donc je ne sais pas.

Tu peux aussi aller faire un tour sur le forum omnimaga, il y a une communauté plus importante pour l'Axe
:;):

Re: [Axe] Problème lors de l'affichage d'une map simple

PostPosted: 20 Mar 2011, 21:22
by nikoladu49
Tout d'abord merci pour ta réponse :):

J'ai rajouté la ligne que tu m'as dit, mais maintenant c'est tout l'écran qui est recouvert du 2e sprite. Je pense donc que le problème viens de la fonction MAP, mais je n'arrive pas du tout à voir où.

Re: [Axe] Problème lors de l'affichage d'une map simple

PostPosted: 20 Mar 2011, 21:33
by Wellen
hmpf. Pour cette partie là je ne saurais pas t'aider désolé :s:

Re: [Axe] Problème lors de l'affichage d'une map simple

PostPosted: 20 Mar 2011, 22:21
by nikoladu49
Bon bah pas grave.
Merci quand même.

Re: [Axe] Problème lors de l'affichage d'une map simple

PostPosted: 21 Mar 2011, 18:25
by tama
Wellen wrote:si je ne m'abuse, ce code là :
Code: Select all
:sub(MAP,GDB0M1,Pic0M1

tu ne l'utilise qu'une fois pour le pointeur Pic0M1 donc pour ton premier sprite ( qui est composé de 2 octets )
Rajoute à la suite le même code, mais cette fois pour le pointeur Pic0M1+8, donc tu te déplace de 2 octets, ce qui pointe le deuxième sprite
Donc :
Code: Select all
:sub(MAP,GDB0M1,Pic0M1
:sub(MAP,GDB0M1,Pic0M1+8



Hm, je connais rien en Axe, mais x+8 c'est pas qu'un seul octet ? (à moins que c'est sous-entendu x+8*2, i.e on se déplace de 2 bits quand on fait +1 ?)

Re: [Axe] Problème lors de l'affichage d'une map simple

PostPosted: 21 Mar 2011, 19:31
by kindermoumoute
Si j'ai bien compris, Pic0AV pointe sur le sprite de ton personnage, que tu essaye de déplacer à l'aide des coordonnées X et Y. Je n'expliquerai pas comment faire ce déplacement, car c'est l'objectif du TPn°2, cependant il est important de bien comprendre le tilemapping. Ton erreur est surement de laisser X dans le calcul :
Code: Select all
:{W*6+X+r1}→A

Qu'il faut remplacer par la variable utilisé dans la boucle (ici V) :
Code: Select all
:{W*6+V+r1}→A

Pourquoi ? Parce que X est dépendant d'une variable que tu incrémente tout seule (je ne vois pas trop ce que tu essaye de faire avec).

Pourquoi pas appeler la fonction en envoyant les pointeurs en argument, mais ce n'est pas nécessaire. Pour avoir une tilemap qui s'affiche en temps réel, il faut inclure la ligne sub(MAP,GDB0M1,Pic0M1 dans ta boucle principale.
Je n'est pas tester, mais ton programme devrait faire défiler de gauche à droite ta sprite, tout en affichant la tilemap. Mais Comme ce sera très rapide tu ne verra pas grand chose à part la tilemap. ^^


PS : Enlève le Dispagraph qui est au milieu de la boucle principale, et une seule pause suffira (surtout que Pause 1 ne fait pas grand chose).

Re: [Axe] Problème lors de l'affichage d'une map simple

PostPosted: 27 Mar 2011, 20:35
by nikoladu49
Merci pour ta réponse.
L'erreur venait bien du X.

De plus, j'ai supprimé la "Pause 1", et j'ai ajouté l'affichage de la tilemap dans la boucle (ce sera utile quand je commencerais le défilement de la map, même si pour le moment c'est surtout pour les tests).

Par contre effectivement, on ne voit pas passer le sprite.
C'est justement pour cela que j'ai laissé le "DispGraph" de la boucle principal.

Est-ce une bonne chose de faire comme ça ?

Re: [Axe] Problème lors de l'affichage d'une map simple

PostPosted: 29 Mar 2011, 17:45
by kindermoumoute
Il n'y a pas besoin de mettre 2 dispgraph dans la même boucle principale, ou alors tu enlève celui qui est à la fin de la fonction MAP.