|
| [résolu]Info concernant une action en boucle | |
| | Auteur | Message |
---|
hanakin Cliqueur Amateur
Nombre de messages : 492
Age : 59
Localisation : Angers
Date d'inscription : 12/09/2012
| Sujet: [résolu]Info concernant une action en boucle Lun 12 Mai 2014 - 15:21 | |
| Bonjours a tous J'ai un petit souccis que je n'arrive pas a resoudre : Je voudrais qu'un petit personnage marche dans une room en continue (juste pour animé un peux la room) J'ai mis ça dans le afterfadein de la room car dans le repetly execute rien ne se passe et dans le AfterFadeIn il ne fait son petit trajet qu'une seule fois et pas en boucle Pour demarrer je le met dans une region[1] x:160,y:378 - Code:
-
function room_AfterFadeIn() { if (Region.GetAtRoomXY(160, 378) == region[1]) { cvegos01.Walk(288, 263, eNoBlock, eAnywhere); cvegos01.AddWaypoint(311, 215) ; cvegos01.AddWaypoint(403, 179) ; cvegos01.AddWaypoint(480, 250) ; cvegos01.AddWaypoint(637, 362) ; cvegos01.AddWaypoint(731, 385) ; cvegos01.AddWaypoint(415, 382) ; cvegos01.AddWaypoint(160, 378) ; } }
Dernière édition par hanakin le Mar 4 Aoû 2015 - 8:25, édité 2 fois |
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: [résolu]Info concernant une action en boucle Lun 12 Mai 2014 - 15:54 | |
| Salut hanakin, Tout d'abord je rappelle que AddWaypoint ignore les zones de déplacement, c'est quelque chose à garder en mémoire. Ensuite je ne comprends pas la pertinence de ton if : les régions sont des choses que tu définis dans l'éditeur et qui ne bougent pas par la suite, donc selon la façon dont tu as dessiné ta première région, la condition sera soit toujours soit jamais vérifiée. La raison pour laquelle tu ne vois aucun effet quand tu mets le code dans RepExec est que l'intégralité de ces commandes sera exécutée à chaque cycle de jeu, ce qui inclut ta commande Walk : le personnage ré-entamera donc son trajet jusqu'au point (288, 378) à chaque cycle de jeu, ceci ayant pour effet de le "geler sur place". Une solution exploite l'idée suivante : chaque fois que ton personnages se trouve aux coordonnées (160,378), on va lui dire d'effectuer sa petite ronde, mais seulement lorsqu'il se trouve à ce point. Je pense que c'est un peu l'idée que tu essayais de concrétiser avec ton if. Pour faire cela, on va regarder à chaque cycle de jeu où se trouve le personnage, et seulement s'il se trouve à (160,378) on lancera les commandes : - Code:
-
function room_RepExec() { if (cvegos01.x == 160 && cvegos01.y == 378) { cvegos01.Walk(288, 263, eNoBlock, eAnywhere); cvegos01.AddWaypoint(311, 215) ; cvegos01.AddWaypoint(403, 179) ; cvegos01.AddWaypoint(480, 250) ; cvegos01.AddWaypoint(637, 362) ; cvegos01.AddWaypoint(731, 385) ; cvegos01.AddWaypoint(415, 382) ; cvegos01.AddWaypoint(160, 378) ; } } En plaçant le personnage à (160,378) comme position initiale, la routine sera lancée dès le premier cycle de jeu dans cette pièce et sera relancée dès qu'elle s'achève puisque le dernier Waypoint du personnage est à nouveau (160,378) : la condition du if sera vérifiée lors de ce cycle de jeu. C'est une question récurrente qui a notamment été discutée ici sur le forum anglophone. _________________ 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 ! |
| | | hanakin Cliqueur Amateur
Nombre de messages : 492
Age : 59
Localisation : Angers
Date d'inscription : 12/09/2012
| Sujet: re info Lun 12 Mai 2014 - 16:34 | |
| Merci pour ta reponse Kitai j'ai teste ton script , mon bonhomme marche mais fait du sur place je vais jeter un coup d'oeil sur le site rossbeaf (ah que je deteste cà) |
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: [résolu]Info concernant une action en boucle Lun 12 Mai 2014 - 16:40 | |
| Bon sinon on peut faire encore plus proche de la solution proposée là-bas : - Code:
-
function room_RepExec() { if (Game.DoOnceOnly("firstwalk")) cvegos01.Walk(160, 378, eNoBlock, eAnywhere) ;
if (cvegos01.x == 160 && cvegos01.y == 378) { cvegos01.AddWaypoint(288, 263); cvegos01.AddWaypoint(311, 215); cvegos01.AddWaypoint(403, 179); cvegos01.AddWaypoint(480, 250); cvegos01.AddWaypoint(637, 362); cvegos01.AddWaypoint(731, 385); cvegos01.AddWaypoint(415, 382); cvegos01.AddWaypoint(160, 378); } } _________________ 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 ! |
| | | hanakin Cliqueur Amateur
Nombre de messages : 492
Age : 59
Localisation : Angers
Date d'inscription : 12/09/2012
| | | | Billbis Disciple de la Grande Tasse Bleue
Nombre de messages : 1346
Date d'inscription : 10/05/2012
| Sujet: Re: [résolu]Info concernant une action en boucle Lun 12 Mai 2014 - 17:25 | |
| Tiens, je ne connaissait pas cette limitation, qui n'est pas mentionné dans l'aide AGS. Apparement, on ne peut enchainer que 7 WayPoints, il te suffit donc d'en enlever un ou deux, c'est à dire de faire une ronde moins complexe. L'autre solution est de décomposer le mouvement en deux : - Code:
-
function room_RepExec() { if (Game.DoOnceOnly("firstwalk")) { cvegos01.Walk(160, 378, eNoBlock, eAnywhere) ; } if (cvegos01.x == 160 && cvegos01.y == 378) { cvegos01.AddWaypoint(288, 263); cvegos01.AddWaypoint(311, 215); cvegos01.AddWaypoint(403, 179); cvegos01.AddWaypoint(480, 250); } else if (cvegos01.x == 1480 && cvegos01.y == 250) { cvegos01.AddWaypoint(637, 362); cvegos01.AddWaypoint(731, 385); cvegos01.AddWaypoint(415, 382); cvegos01.AddWaypoint(160, 378); } } Courage ! Tu tiens le bon bout ! |
| | | hanakin Cliqueur Amateur
Nombre de messages : 492
Age : 59
Localisation : Angers
Date d'inscription : 12/09/2012
| Sujet: conclusion [resolu] Lun 12 Mai 2014 - 17:52 | |
| Pour conclure cette info qui pourra servir a d'autre , Merci a Kitai et Bilbis Mon personnage fonctionne bien en boucle - Code:
-
function room_AfterFadeIn() { cvegos01.Walk(160, 378, eNoBlock, eAnywhere) ; //pour etre sur d'etre sur la bonne position 160,378 }
ensuite la boucle - Code:
-
function room_RepExec() { if (cvegos01.x == 160 && cvegos01.y == 378) { cvegos01.AddWaypoint(288, 263); cvegos01.AddWaypoint(311, 215); cvegos01.AddWaypoint(403, 179); cvegos01.AddWaypoint(480, 250); cvegos01.AddWaypoint(731, 385); // cvegos01.AddWaypoint(160, 378); NE DOIT PAS RETOURNER AU DEPART SI NON PLANTAGE // et pas plus de 5 AddWaypoint meme en cyndant en deux ça plante aussi } }
Dernière édition par hanakin le Sam 4 Oct 2014 - 19:15, édité 2 fois |
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: [résolu]Info concernant une action en boucle Lun 12 Mai 2014 - 18:40 | |
| En voilà des choses bien étranges. Tout d'abord cette limitation non référencée du nombre de commandes AddWaypoint. Mais la limitation est-elle de 7 comme tu le dis Billbis ou de 5 comme tu le dis hanakin ? Ensuite, chose que je ne m'explique pas, comment le déplacement peut-il boucler si tu commentes la ligne qui fait retourner le personnage au point (160,378) hanakin ? _________________ 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 ! |
| | | Billbis Disciple de la Grande Tasse Bleue
Nombre de messages : 1346
Date d'inscription : 10/05/2012
| Sujet: Re: [résolu]Info concernant une action en boucle Lun 12 Mai 2014 - 18:46 | |
| En fait il faudrait peut-être essayer sans accumuler les WayPoints en les "resetant" régulièrement avec un Walk: - Code:
-
function room_AfterFadeIn() { cvegos01.Walk(160, 378, eNoBlock, eAnywhere) ; //pour etre sur d'etre sur la bonne position 160,378 }
function room_RepExec() { if (cvegos01.x == 160 && cvegos01.y == 378) { cvegos01.Walk(288, 263); cvegos01.AddWaypoint(311, 215); cvegos01.AddWaypoint(403, 179); cvegos01.AddWaypoint(480, 250); } else if (cvegos01.x == 480 && cvegos01.y == 250) { cvegos01.Walk(731, 385); cvegos01.AddWaypoint(731, 385); cvegos01.AddWaypoint(415, 382); cvegos01.AddWaypoint(160, 378); } }
|
| | | hanakin Cliqueur Amateur
Nombre de messages : 492
Age : 59
Localisation : Angers
Date d'inscription : 12/09/2012
| Sujet: re re re info Lun 12 Mai 2014 - 19:15 | |
| J'ai essayer ton script Billbis Le personnage fait du sur place l 'animation marcher est active mais il n'avance pas Merci quand meme Il y a quand meme des trucs bizarres j'ai un 2eme personnage programmé pareil ; lui il ne fait rien a part le walk du depart ? - Code:
-
function room_AfterFadeIn() { cvegos01.Walk(160, 378, eNoBlock, eAnywhere) ; cvegos02.Walk(52, 235, eNoBlock, eAnywhere) ; }
- Code:
-
function room_RepExec() { if (cvegos01.x == 160 && cvegos01.y == 378) { cvegos01.AddWaypoint(288, 263); cvegos01.AddWaypoint(311, 215); cvegos01.AddWaypoint(403, 179); cvegos01.AddWaypoint(480, 250); cvegos01.AddWaypoint(731, 385); } if (cvegos02.x == 52 && cvegos02.y == 235) { cvegos02.AddWaypoint(74, 113); cvegos02.AddWaypoint(108, 66); cvegos02.AddWaypoint(154, 120); cvegos02.AddWaypoint(162, 295); cvegos02.AddWaypoint(75, 227); } }
|
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: [résolu]Info concernant une action en boucle Lun 12 Mai 2014 - 20:18 | |
| Décidément cette commande AddWaypoint me plaît de moins en moins : j'ai l'impression qu'elle ne respecte pas la vitesse de déplacement du personnage. De plus sous certaines conditions les points intermédiaires s'accumulent et déclenchent une erreur d'excès de chargement ("chemin trop complexe"). Il faut donc s'assurer que la mémoire a été libérée en vérifiant la propriété Moving. Ça donne donc quelque chose comme ça : - Code:
-
function room_RepExec() { if (!cvegos01.Moving) { cvegos01.AddWaypoint(288, 263); cvegos01.AddWaypoint(311, 215); cvegos01.AddWaypoint(403, 179); cvegos01.AddWaypoint(480, 250); cvegos01.AddWaypoint(731, 385); cvegos01.AddWaypoint(160, 378); } } As-tu un dialogue ou autre chose du genre qui se déclenche au début dans la pièce hanakin ? Car le code de la fonction RepExec n'est pas exécuté lorsqu'il y a des événements bloquants (typiquement, les dialogues), ce qui pourrait expliquer ton personnage qui ne bouge pas. Si tu veux outrepasser ce comportement, utilise plutôt la fonction repeately_execute_always, mais assure-toi de n'y mettre aucune commande bloquante (pas de Walk avec eBlock ni de Say donc). _________________ 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 ! |
| | | hanakin Cliqueur Amateur
Nombre de messages : 492
Age : 59
Localisation : Angers
Date d'inscription : 12/09/2012
| Sujet: affaire a suivre Lun 12 Mai 2014 - 20:26 | |
| Volontairement j'ai mis les deplacement au debut Le 1er personnage pas de probleme cela fonctionne corectement c'est le deuxieme que j'ai rajouter qui fait rien je vais essayer ton script. Ton script fonctionne parfaitement sur les 2 personnages BRAVO Mr Kitai j'ai meme 8 AddWaypoint sur le 3eme personnage et pas d'erreur ENCORE MERCI - Code:
-
function room_AfterFadeIn() { cvegos1.Walk(160, 378, eNoBlock, eAnywhere) ; cvegos2.Walk(52, 235, eNoBlock, eAnywhere) ; cvegos3.Walk(315, 70, eNoBlock, eAnywhere) ; aElite25.Play(eAudioPriorityNormal, eRepeat) ; cEgo.SpeechColor=65504; cEgo.Say("Mr Spock ."); cEgo.SpeechColor=63488; DisplayAtY(515,"Oui Mr"); cEgo.SpeechColor=65504; cEgo.Say("Surveillez bien"); cEgo.Say("les alentours de"); cEgo.Say("Vegos il ne faudrait"); cEgo.Say("pas que ce brigand"); cEgo.Say("s'echappe."); cEgo.SpeechColor=63488; DisplayAtY(515,"Pas de problemes."); } - Code:
-
function room_RepExec() { if (!cvegos1.Moving) { cvegos1.AddWaypoint(288, 263); cvegos1.AddWaypoint(311, 215); cvegos1.AddWaypoint(403, 179); cvegos1.AddWaypoint(480, 250); cvegos1.AddWaypoint(731, 385); cvegos1.AddWaypoint(160, 378); } if (!cvegos2.Moving) { cvegos2.AddWaypoint(74, 113); cvegos2.AddWaypoint(108, 66); cvegos2.AddWaypoint(154, 120); cvegos2.AddWaypoint(162, 295); cvegos2.AddWaypoint(75, 227); } if (!cvegos3.Moving) { cvegos3.AddWaypoint(413, 101); cvegos3.AddWaypoint(439, 149); cvegos3.AddWaypoint(587, 241); cvegos3.AddWaypoint(699, 220); cvegos3.AddWaypoint(709, 81); cvegos3.AddWaypoint(573, 77); cvegos3.AddWaypoint(506, 101); cvegos3.AddWaypoint(454, 123); } }
|
| | | Contenu sponsorisé
| Sujet: Re: [résolu]Info concernant une action en boucle | |
| |
| | | | [résolu]Info concernant une action en boucle | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |