Game maker, quelques problèmes.

Démarré par Chao, 20 Juillet 2007 à 22:11

0 Membres et 1 Invité sur ce sujet

20 Juillet 2007 à 22:11 Dernière édition: 20 Juillet 2007 à 22:18 par Maxime1007
Voila j'ai commencé a essayer d'utiliser Game maker et j'ai rencontré quelque problème.

Bon j'ai essayé ce script pour faire bougé une balle dans tous les sens:

{
if (keyboard_check_pressed (vk_left)) x -=4 ;
if (keyboard_check_pressed (vk_right)) x +=4;
if (keyboard_check_pressed (vk_down) y -=4;
if (keyboard_check_pressed (vk_up)) y +=4;
if (keyboard_check_pressed (vk_left && vk_up)) x -=4 y +=4;
if (keyboard_check_pressed (vk_right && vk_up)) x +=4 y +=4;
if (keyboard_check_pressed (vk_left && vk_down)) x -=4 y -=4;
if (keyboard_check_pressed (vk_right && vk_down)) x +=4 y -=4;
}

J'ai inserré ce script dans l'evenement Create de mon objet pourtant il ne bouge pas l'orsque j'appuie sur une flèche.
Je vien de commencer a essayer d'utiliser le GML et je ne vois pas l'erreur, quelqu'un peut m'éclaircir sur ca?
Aussi j'aimerais savoir comment faire changé un sprite en GML

ex: if (keyboard_check_pressed (vk_up)) ****
**** voulant dire changé un sprite 'a' par un sprite 'b'
J'aimerait savoir comment faire cette action.

Merci de m'aider ^^.


Edit: Si possible j'aimerais que l'on m'explique plus clairement ces terme que j'ai trouvé dans un guide de GML.

• < <= == != > >=: comparisons, result in true (1) or false (0)
• | & ^: bitwise operators (| = bitwise or, & = bitwise and, ^ = bitwise xor)
• << >>: bitwise operators (<< = shift left, > > = shift right)

20 Juillet 2007 à 22:33 #1 Dernière édition: 20 Juillet 2007 à 22:53 par Link 57
Tout d'abord, ton code d'appui de touches directionnelles doit apparaître dans l'évènement Step de l'objet, et non dans le Create. ;)


Ensuite, pour ce qui est du changement de sprite, voilà ce que je te propose :

if (keyboard_check_pressed (vk_up)) {sprite_index=spr_haut}
if (keyboard_check_pressed (vk_up)) {sprite_index=spr_bas}
if (keyboard_check_pressed (vk_up)) {sprite_index=spr_gauche}
if (keyboard_check_pressed (vk_up)) {sprite_index=spr_droite}

Tout simplement. :)

Et il y a une solution bien plus utilisée et bien plus efficace, que je vais te proposer tout de suite...

Il s'agirait en fait de définir la direction du personnage à l'aide de variables. Ce qui permettrait par la suite, à l'utiliser afin de ne pas à avoir à remettre "à l'appui d'une touche directionnelle, machin", mais de demander seulement la variable.

Donc, pour ce faire, munie-toi d'une variable nommée direct. Dans le create du personnage, définis la variable direct à bas (direct="bas") ou autre direction (la direction que tu souhaites lui attribuer au début du jeu). Une fois cette variable définie, retourne dans le code de marche du personnage (dans le Step). Il faudra alors que tu ajoutes direct="ladirection" après chaque instruction (en gros, si t'appuies la touche gauche, direct="gauche". Voilà le code que tu devrais obtenir :

if (keyboard_check_pressed (vk_up)) {direct="haut"}
if (keyboard_check_pressed (vk_up)) {direct="bas"}
if (keyboard_check_pressed (vk_up)) {direct="gauche"}
if (keyboard_check_pressed (vk_up)) {direct="droite"}

Voilà, ça de fait. :)

Par la suite, il va falloir aller dans le code du changement de sprite. Et donc faire que si direct="ladirection" (à l'inverse de faire que si la touche ladirection est pressée...), le sprite devient spr_ladirection. Voici un code :

if direct="haut" {sprite_index=spr_haut}
if direct="bas" {sprite_index=spr_bas}
if direct="gauche" {sprite_index=spr_gauche}
if direct="droite" {sprite_index=spr_droite}


Pour terminer, venons-en les termes que tu as cités... En fait, il s'agit, pour la plupart, de comparaisons et éventuellement d'abréviations de comparaisons (par exemple, le signe '&' remplace 'and' puis le signe '|' remplace 'or'). Voilà quelques précisions :

< : l'instruction précédente est inférieure à...
<= : l'instruction précédente est inférieure ou égale à...
== : l'instruction précédente est égale à...
!= : l'instruction précédente est différente de...
> : l'instruction précédente est supérieure à...
>= : l'instruction précédente est supérieure ou égale à...
| : or (ou)
& : and (et)

Voilà, j'espère avoir pû t'aider. Si t'as d'autres questions ou problèmes, contacte-moi. ;)

Edit : voici un exemple en .gm6, afin d'être mieux compris. ;)

J'ai tous lus et j'aurais une autre question: Tu dis de me munir d'une variable appelé direct, commment dois-je faire?
Ca peut parraitre stupide comme question mais comment je fais pour activé une variable pour faire en sorte que ''direct'' soit une variable et pas un mot indetecté?

20 Juillet 2007 à 22:56 #3 Dernière édition: 20 Juillet 2007 à 23:11 par Link 57
En fait, les variables sont soit globales, soit définies uniquement sur l'objet en question. Ce qui fait que l'on peut mettre direct="bas" comme si l'on mettait global.direct="bas". Mais il vaut mieux utiliser une variable propre à cet objet seulement. De ce fait, tu pourras utiliser une variable direct à tes ennemis par exemple (si un octorok est vers le bas, sa variable direct="bas"), chaque objet pourra avoir sa propre variable direct, autrement dit. Cependant, si l'on avait utilisé une variable globale, c'est qu'elle est utilisée pour tout ce qui se passe dans le jeu, et non pour l'objet en question seulement. Dis-le moi, si tu n'as pas (tout) compris.

Edit : J'ai ajouté un exemple dans mon post précédant. ;)

Ouah ton exemple est compliqué m'enfin je crois que je n'ais que besoin de pratique.
Je vais essayer de comprendre et si j'ai d'autre question je reviendrais poster, merci beaucoup pour ton aide.

20 Juillet 2007 à 23:27 #5 Dernière édition: 20 Juillet 2007 à 23:36 par Link 57
Pas de quoi. ;)

Et l'exemple n'est pas difficile. Crois-moi, celui d'OOT 2d++ est bien plus développé et bien plus compliqué que ça... Et puis après tout, dans cet exemple, j'ai ajouté pas mal de commentaires afin de mieux comprendre, donc... ;)


Autrement, je vais essayer de te faire un petit récapitulatif de l'engine (si on peut appeller ça une engine). Ce sera sans doute plus clair pour toi. :D

Donc tout d'abord, on règle la direction de Link vers le bas (direct="bas"), puis on annonce que la variable move=true (celle-ci servira à stopper le personnage, si on appuie sur pause, ou qu'on ouvre le menu). Tout ça dans un même code du Create... On doit donc avoir ça, au final :


direct="bas" ; move=true


Ensuite, dans le Step, il faut faire en sorte que si telle touche est pressée, alors le personnage prend cette direction (direct="direction") et avance (x+=valeur, x-=valeur,y+=valeur, ou encore y-=valeur), et que si cette même touche est relâchée, alors, on s'arrête... ^_^ Voilà donc ce qu'on devrait obtenir dans le Step (je ne le fais que pour le bas mais j'expliquerai quelques trucs en dessous) :


if keyboard_check(vk_down)
{
direct="bas"
sprite_index=spr_bas
y+=(valeur assez petite)
}

if keyboard_check_released(vk_down)
{
sprite_index=spr_bas_pause
y+=0
}


Petites indications si tu ne comprends pas comment t'y prendre avec les x et y ;) :

Les x sont les coordonnées à l'horizontale. Donc, plus on va vers la droite, plus il y a de x, et plus on va vers la gauche, moins il y en a. :) Donc si la touche droite est pressée, x+=(une valeur) et si elle est relâchée, x+=0 (on ne se déplace pas). Inversement, la touche gauche est pressée... ! x-=(une valeur) ; si elle est également relâchée, alors x-=0.


Les y, eux, sont les coordonnées à la verticale. Ainsi, plus on va vers le bas, plus les y augmentent. Au contraire, plus on remonte, plus les y diminuent. Donc si la touche bas est pressée, y+=(une valeur) et si elle est relâchée, y+=0 (on ne se déplace pas). Inversement, la touche haut est pressée, y-=(une valeur), puis, si elle est également relâchée, alors y-=0.


Voilà, espérons que ça t'aura bien servi. Et s'il y a d'autres choses incomprises, dis-le surtout. ;)