Forum d'entraide à la création de jeux d'aventure
 
PortailAccueilFAQRechercherS'enregistrerMembresConnexion

Partagez | 
 

 [résolu]Info concernant une action en boucle

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
hanakin
Cliqueur Amateur
Cliqueur Amateur


Nombre de messages : 488

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: [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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2431

Date d'inscription : 01/08/2006


MessageSujet: 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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
hanakin
Cliqueur Amateur
Cliqueur Amateur


Nombre de messages : 488

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: 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à)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2431

Date d'inscription : 01/08/2006


MessageSujet: 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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
hanakin
Cliqueur Amateur
Cliqueur Amateur


Nombre de messages : 488

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: info   Lun 12 Mai 2014 - 16:48

ouh la la ça se corse je crois que je vais laisser tombe




Dernière édition par hanakin le Lun 12 Mai 2014 - 18:16, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue


Nombre de messages : 1275

Date d'inscription : 10/05/2012


MessageSujet: 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 !

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nothingaboutthedog.blogspot.fr/
hanakin
Cliqueur Amateur
Cliqueur Amateur


Nombre de messages : 488

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: 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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2431

Date d'inscription : 01/08/2006


MessageSujet: 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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue


Nombre de messages : 1275

Date d'inscription : 10/05/2012


MessageSujet: 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);
  }
}

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nothingaboutthedog.blogspot.fr/
hanakin
Cliqueur Amateur
Cliqueur Amateur


Nombre de messages : 488

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: 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);
  }
}
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2431

Date d'inscription : 01/08/2006


MessageSujet: 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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
hanakin
Cliqueur Amateur
Cliqueur Amateur


Nombre de messages : 488

Age : 51

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: 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);
  }
}
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
Contenu sponsorisé




MessageSujet: Re: [résolu]Info concernant une action en boucle   Aujourd'hui à 7:59

Revenir en haut Aller en bas
 
[résolu]Info concernant une action en boucle
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [résolu]info Compteur/Timer
» [Résolu] Combat : réaction des ennemis.
» [résolu] Démarrage en boucle ?
» Boucle du Serpent [résolu]
» Résolu Sims 2 coiffure longue , bouclé et Frisé !

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: CREATION DE JEUX :: Questions / Réponses-
Sauter vers: