Page 1 of 1

Aide pour un jeu en Axe

Unread postPosted: 10 Dec 2011, 18:34
by now9434
Bonjour à tous,

J'aurais besoin d'aide pour créer une map en Axe. Le but serait d'afficher une map plus grande que l’écran en largeur est de défiler avec la commande "Horizontal -".
Par exemple est le code pour l'ecran entier:
Code: Select all
[000000000000]->GBD1
[000000000000]
[000000000000]
[000000000000]
[000000000000]
[000000000000]
[000000000000]
[000000000000]


mais si je rajoute des valeurs dans chaque code Hexa ils vont se mettre a la ligne d'en dessous:
Code: Select all
[0000000000001111]->GBD1
[0000000000000000]
etc


va etre traduit par:
Code: Select all
[000000000000]->GBD1
[111100000000]
[0000...]
etc


Merci pour votre aide :):

Re: Aide pour un jeu en Axe

Unread postPosted: 12 Dec 2011, 16:34
by Persalteas
Faire du scrolling en Axe, quoi ?

Hmm je ne m'y connais pas personnellement, mais je connais un professionnel...
:ugeek:
Il a posté un tuto sur le sdz qui n'a pas encore été mis en ligne.
Je lui dis de jeter un coup d'oeil par là...

Matrefeytontias, viens ici !

Re: Aide pour un jeu en Axe

Unread postPosted: 12 Dec 2011, 19:18
by matref
On m'appelle ? Me voilà ! :D:

Alors je préviens, je vais être un peu long parce que c'est pas évident ^^

Le but est de créer un index qui va indiquer quelle partie de map afficher à l'écran. IL NE FAUT JAMAIS SCROLLER UNE MAP AVEC Horizontal ni Vertical !!!! Hérétique !! Satan !! :evil:

Donc, on va créer cet index et notre map ... disons 16*10 au lieu de 12*8 :
Code: Select all
:.On commence avec l'horizontal
:0->I
:[0000000000000000]->GDB1
:[0000000000000000
:[0000000000000000
:[0000000000000000
:[0000000000000000
:[0000000000000000
:[0000000000000000
:[0000000000000000
:[0000000000000000
:[0000000000000000


Ensuite tu prends ta boucle pour afficher la map et tu la modifies pour qu'elle prenne en compte 8 colonnes au lieu de 6 et 12 lignes au lieu de 8 :
Code: Select all
:.A le nombre de colonnes et B le nombre de lignes
:For(B,0,7)
:For(A,0,7)
:On oublie pas d'ajouter l'index lors de l'extraction de tile (+I)
:{B*10+A+I+GDB1}->C
:
:Pt-Off(A*16,B*8,C/16*8+Pic1
:Pt-Off(A*16+8,B*8,C^16*8+Pic1
:End
:End


À partir de ce code, t'as juste à modifier la valeur de I (avec des getkeys par exemple) pour faire scroller la map. C'est ce qu'on appelle un index, il représente une case sur la map, et c'est à partir de cette case qu'on va afficher.

Justement, fais attention à pas dépasser les limites de la map (fais des tests sur I avant de le modifier), ça afficherai n'importe quoi :)

Je t'envoie le lien de mon tuto dès qu'il sera validé

En espérant t'avoir aidé,

Matrefeytontias ;)

Re: Aide pour un jeu en Axe

Unread postPosted: 12 Dec 2011, 20:52
by now9434
Merci pour votre aide :)
Mais avec cette méthode je bouge la map de 8 pixels à chaque fois, moi qui voudrait la décaler de 1 en 1?

Re: Aide pour un jeu en Axe

Unread postPosted: 12 Dec 2011, 22:19
by matref
Là je t'avouerai que je cherche toujours ^^'

Re: Aide pour un jeu en Axe

Unread postPosted: 13 Dec 2011, 11:12
by Wellen
Ah, le smooth scrolling, toute une histoire ! :D

Si tu veux pas t'embêter, pour le coup tu peux utiliser Vertical et Horizontal.
Si tu regardes la liste des commandes, celles-ci décalent le buffer d'une rangée ou colonne de pixels et en insèrent une blanche de l'autre côté, donc ta map va se décaler, mais en laissant place à du blanc et pas au reste, comme on pourrait le penser :#roll#: Et je pense que c'est pour ça que matrefeytontias ne veut pas entendre parler ? ou c'est plus une histoire d'optimisation des commandes ? A voir...

Je propose de faire une boucle, dans laquelle tu décales le buffer avec la commande que tu veux (en fonction de la touche pressée), et où tu dessines la rangée/colonne qu'il te manque pour compléter. Exemple, décalage de la map à gauche (donc on complète à droite) avec Horizontal- :
Code: Select all
:For (F,1,8)
:Horizontal-
:puis Affichage de la colonne de droite (boucle for, voir le post de Matrefeytontias, son code est à modifier pour n'afficher que ce que tu veux)
:DispGraph
:End

Dans la théorie ça devrait marcher, je t'avouerai ne pas avoir essayé, mais c'est comme ça que je vois les choses.

L'idée c'est de ne pas réafficher toute la map à chaque fois, mais une seule partie, pour gagner de la fluidité (surtout si t'as des niveaux de gris, ça peut faire mal aux yeux :P )

Sur Omnimaga, où la communauté Axe est bien plus importante (mais bien plus anglophone aussi :-D) tu pourras trouver moult topics à ce sujet j'imagine. Mais entre français, qu'est-ce qu'on s'amuse ! :-D

Re: Aide pour un jeu en Axe

Unread postPosted: 19 Dec 2011, 15:01
by now9434
Donc il faut que je dessine chaque colonne à chaque "Horizontal-"?
Les listes n'etant pas assez grandes je peut utiliser des "appvars" il me semble, mais je sais pas trop comment on les utilise, j'ai vu qu'il fallait mettre le nombre d'octet qu'on voulait stocké il me semble mais j'ai vraiment pas compris donc si quelqu'un sait ce sera avec plaisir :):
Merci.

Re: Aide pour un jeu en Axe

Unread postPosted: 27 Dec 2011, 23:16
by metallica
Si tu veux faire du tilemapping pixel par pixel, il faut en effet utiliser le smooth scrolling. Je vais essayer de t'expliquer comment faire :
Tout d'abord , tu dois changer de signe deux variables (I et J) en fonction de la direction où tu vas comme ceci :
Code: Select all
:If getKey(3) and (I=0) and (J=0)
:1→I
:End
:If getKey(2) and (I=0) and (J=0)
:-1→I
:End
:If getKey(1) and (I=0) and (J=0)
:1→J
:End
:If getKey(4) and (I=0) and (J=0)
:-1→J
:End


Ensuite tu les ajoutes à H et V (le décalage horizontale et verticale sur la map entre 0 et 8 ) :
Code: Select all
H+I+I→H
V+J+J→V

Lorsque tu as bougé de 8 pixels, tu rajoute (ou soustrait 1) à la position horizontale/verticale (ici P = horizontale et Q = verticale) :
Code: Select all
:If H-8=0 or (H+8=0
:P+I→P
:0→H→I
:End
:If V-8=0 or (V+8=0
:Q+J→Q
:0→V→J
:End


En tout, tu as :
Code: Select all
:Repeat getKey(15)
:
:If getKey(3) and (I=0) and (J=0)
:1→I
:End
:If getKey(2) and (I=0) and (J=0)
:-1→I
:End
:If getKey(1) and (I=0) and (J=0)
:1→J
:End
:If getKey(4) and (I=0) and (J=0)
:-1→J
:End
:
:
:H+I+I→H
:V+J+J→V
:
:If H-8=0 or (H+8=0
:P+I→P
:0→H→I
:End
:If V-8=0 or (V+8=0
:Q+J→Q
:0→V→J
:End
:
:sub(MAP)
:Pt-Off(48,32,Pic1
:DispGraphClrDraw
:End
:Return


sub(MAP) appellera la fonction qui s'occupe d'afficher la map à l'écran et Pic1 contient le sprite du personnage.

Pour voir les tiles sur le bord quand tu te déplace, tu dois avoir préalablement affiché la colonne/ligne d'après/avant.
Voilà maintenant le code de la fonction MAP :
Code: Select all
:Lbl MAP
:For(Y,0,9
:For(X,0,13
:Pt-On(X*8-8-H,Y*8-8-V,{Y+Q*[largeur de la map]+X+P+GDB1}*8+Pic0
:End
:End
:Return

avec GDB1, un pointeur sur la map et Pic0, un pointeur sur les tiles.

En espérant t'avoir aidé. ;-)

Re: Aide pour un jeu en Axe

Unread postPosted: 21 Jan 2012, 21:33
by now9434
Merci beaucoup :):

Re: Aide pour un jeu en Axe

Unread postPosted: 21 Jan 2012, 22:53
by metallica
De rien