grod C'est quoi la Tasse Bleue ?
Nombre de messages : 5
Date d'inscription : 12/11/2011
| Sujet: [résolu]deplacement d'un personnage Mer 30 Nov 2011 - 22:19 | |
| bonjour, voila j'ai écrit ce bout de code pour déplacer un personnage dans une room et arrivé a la fin des déplacements je souhaite recommencer le même cycle. - Code:
-
function room_AfterFadeIn() { encours = 0; posi_x[0] = 150; posi_y[0] = 447; et ensuite 3 autres positions différentes } et ensuite - Code:
-
function room_RepExec() { maxencours = 3; if (methode_dep == 1) { if (!cSam.Moving){ if((posi_x[encours] == cSam.x)&&(posi_y[encours] == cSam.y)){ encours += 1; if ( encours > maxencours ){ encours = 0; } } else{ if (encours > maxencours){ encours = 0; cSam.Walk(posi_x[encours], posi_y[encours], eNoBlock, eAnywhere); } } // du else } // du if moving }// fin methode }// fin proce
et a la fin du déplacement, il s’arrête a la fin du 4 eme trajets. bien entendu, j'ai téléchargé le module CharacterControl et c'est pareil il s’arrête a la fin et je n'ai pas vu de boucle. d’où la variable methode_dep pour tester les deux méthodes. il fait bien entendu plus de choses que moi, mais j'essaye de comprendre. voila a bientôt. ps je suis désolé mais l'indentation est différente et sur ags elle est bonne( exemple avec if (encours > maxencours) le encours = 0; est plus a gauche _________________ quelques tutorial dispo sur app inventor et prochainement sur advanced games studio
Dernière édition par grod le Sam 3 Déc 2011 - 9:59, édité 1 fois |
|
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: [résolu]deplacement d'un personnage Jeu 1 Déc 2011 - 16:50 | |
| Salut grod, Je n'ai jamais utilisé le module CharacterControl, mais en ce qui concerne ton code quelques petites choses me taraudent. - grod a écrit:
-
- Code:
-
function room_RepExec() { maxencours = 3; if (methode_dep == 1) { if (!cSam.Moving){ if((posi_x[encours] == cSam.x)&&(posi_y[encours] == cSam.y)){ encours += 1; if ( encours > maxencours ){ encours = 0; } } else{ if (encours > maxencours){ encours = 0; cSam.Walk(posi_x[encours], posi_y[encours], eNoBlock, eAnywhere); } } // du else } // du if moving }// fin methode }// fin proce
Là, tel que c'est écrit (si on omet "methode_dep"), ton code signifie la chose suivante : - Code:
-
A chaque cycle de jeu : Si Sam ne bouge pas : S'il se trouve à la position finale actuellement pertinente : alors on passe à la destination suivante S'il n'y a pas de "suivante" : alors la destination redevient la première destination En revanche, si Sam ne se trouve pas à la position finale actuellement pertinente (et qu'il ne bouge toujours pas) : Si on cherche une destination qui n'existe pas (ce qui, si c'était le cas, aurait déclenché un 'out of array' dans le premier if : 'posi_x[encours]') : alors la destination redevient la première destination et Sam se déplace vers la destination pertinente (donc nécessairement la première : c'est ce qu'on vient de définir) Avec uniquement ce bout de code, donc, Sam ne devrait même pas se déplacer car la seule commande de déplacement se trouve sous le if définissant une condition qui devrait faire planter le jeu (en estimant que la taille de tes tableaux posi_x et posi_y soit de maxencours + 1). De toute façon, puisque tu t'assures déjà à l'endroit où tu incrémentes encours que cette variable ne dépassera pas maxencours, ta commande Walk ne sera jamais exécutée (le if la contenant n'étant alors jamais validé). Voici ce que je peux donc te proposer (très similaire à ce que tu as fait) : - Code:
-
int encours, maxencours = 3; int posi_x[4], posi_y[4]; function room_AfterFadeIn() { encours = 0; posi_x[0] = 100; posi_y[0] = 100; posi_x[1] = 200; posi_y[1] = 100; posi_x[2] = 200; posi_y[2] = 200; posi_x[3] = 100; posi_y[3] = 200; }
function room_RepExec() { // Si le personnage ne se déplace plus... if (!cSam.Moving) { // ... alors on passe à la destination suivante encours += 1; // S'il n'y a pas de "suivante", on retourne à la première if (encours > maxencours) encours = 0; // Enfin, on dit au personnage de se déplacer vers cette destination cSam.Walk(posi_x[encours], posi_y[encours], eNoBlock, eAnywhere); } } Chez moi, ce code fonctionne sans soucis. Teste ça et tiens-moi au courant _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Dernière édition par Kitai le Jeu 1 Déc 2011 - 20:41, édité 1 fois |
|
grod C'est quoi la Tasse Bleue ?
Nombre de messages : 5
Date d'inscription : 12/11/2011
| Sujet: Re: [résolu]deplacement d'un personnage Jeu 1 Déc 2011 - 20:32 | |
| bonsoir kitai, merci pour ta réponse rapide. tout fonctionne maintenant avec ta méthode pour les autres membres du forum il faut juste bouger sam et pas ego (lol) merci encore kitai a bientot _________________ quelques tutorial dispo sur app inventor et prochainement sur advanced games studio
|
|
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: [résolu]deplacement d'un personnage Jeu 1 Déc 2011 - 20:40 | |
| - grod a écrit:
- tout fonctionne maintenant avec ta méthode pour les autres membres du forum il faut juste bouger sam et pas ego (lol)
Oups ! Je vais corriger ça tout de suite (j'ai bien remplacé dans le if mais pas pour le walk) N'oublie pas d'indiquer "Résolu" dans le titre du sujet _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
|
Contenu sponsorisé
| Sujet: Re: [résolu]deplacement d'un personnage | |
| |
|