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

Partagez | 
 

 [résolu]Terminer une animation d'arrière plan avant un dialogue

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 1278

Age : 27

Localisation : Condate

Date d'inscription : 01/08/2011


MessageSujet: [résolu]Terminer une animation d'arrière plan avant un dialogue   Mer 21 Aoû 2013 - 17:59

Salut ! Allez un petit défi pour vous (ou pas) ça faisait longtemps ^^

Je vous explique :
Mes personnages ont une animation d'arrière plan quand on ne leur parle pas. Ils font leur petite vie pendant que le joueur fait la sienne (normal, quoi). Donc par définition cette animation n'est pas bloquante, sinon le script ne peut pas continuer de s'exécuter tranquillement.

Quand on leur parle, les personnages s'interrompent et se tournent vers le personnage joueur. Il y a donc une animation de transition entre l'animation d'arrière plan, et la position de dialogue. Seulement voilà : cette animation de transition est calée pour être raccord avec la dernière vignette de l'animation d'arrière plan. Mais comme celle-ci n'est pas bloquante, elle s'interrompt au moment où l'animation de transition est appelée, et donc potentiellement en plein milieu. Vous me suivez ?

En gros, il faudrait que l'animation d'arrière plan ce termine avant de lancer l'animation de transition. Ce qui revient un peu à transformer le "eNoblock" en "eBlock" subitement. Mais bon, j'imagine que ça n'est pas possible dans l'état... Auriez-vous une solution ?

Edit : une solution crédible serait de lancer l'animation dite d'arrière plan à partir de la vignette actuelle (en utilisant character.frame), et la rendre bloquante. Seulement, la fonction Animate débute forcément à la vignette 0, et je ne vois pas de fonction permettant de lancer une animation à partir d'une vignette prédéfinie. Ou alors il faudrait faire autant de séquences qu'il y a de vignettes, mais ça serait un peu encombrant comme méthode... Si jamais vous n'avez pas mieux, dites le moi, comme ça je saurais que je n'ai plus qu'à l'appliquer quand même... perplexe

Edit 2 : Bon ben j'ai trouvé en fait ! C'est tout simple il suffit d'ajouter la ligne suivante :

Code:
while (cPerso.Frame < 49) Wait(1); //49 étant le nombre de vignettes constituant l'animation
Ainsi, tant que le personnage n'a pas atteint la vignette 49, il continue son animation !

Vous allez me dire, j'aurais pu attendre un peu avant de poster ici, mais c'est comme ça, à chaque fois que j'écris un problème que je ne crois pas pouvoir résoudre tout seul ici, ça m'aide à y voir plus clair et à y arriver ! Enfin à chaque fois... disons plutôt, certaines fois ^^

Il ne resterait plus qu'à créer une petite fonction pour automatiser ça, mais je ne sais pas si on peut vérifier le nombre de vignettes contenue dans une séquence. Ça n'a pas vraiment d'importance, d'ailleurs.

Edit 3 : Ah oui, c'est possible, grâce à Game.GetFrameCountForLoop ! Merci le magnifique aide d'AGS et sa magnifique traduction !

Je vais peut-être m'amuser à coder une petite fonction d'une utilité très relative...

Edit 4 : Ayé grand sourire:
Code:
function FinishCurrentAnimation(this Character*){
  int Vue = this.View;
  int Sequence = this.Loop;
  int NbVignettes = Game.GetFrameCountForLoop(Vue, Sequence);
  while (this.Frame < (NbVignettes - 1)) Wait(1);
}
Et ça marche sourire

Billbis du futur a écrit:
Eh, Kitai du futur, il devient bizarre Valoulef, il parle tout seul...
Kitai du futur a écrit:
Bah oui, maintenant qu'il sait apporter de l'aide niveau débutant, il peut s'apporter de l'aide à lui même ! Laissons-le faire, regarde comme il est content...

_________________
"Je pense que la Terre tourne autour du soleil à une vitesse de 30 kilomètres par seconde et que je suis là, accroché à ce bolide de feu qui fonce d'un infini à un autre, accroché à une table, suspendu dans le vide, pendant que, sérieusement, drogué, abruti, inconscient, j'affirme que nous sommes désolés d'apprendre la perte d'un colis expédié le 4 et que nous ferons l'impossible pour réparer cet incident."

L'Employé, Jacques Sternberg.


Dernière édition par valoulef le Jeu 22 Aoû 2013 - 19:27, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
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]Terminer une animation d'arrière plan avant un dialogue   Mer 21 Aoû 2013 - 20:29

Félicitations valoulef !
Comme tu l'as remarqué, il est plus facile qu'il n'y paraît d'obtenir ce que tu voulais (à vrai dire même ta fonction tient en une seule ligne si tu ne déclares aucune variable intermédiaire).

Après j'imagine que la solution la plus agréable pour le joueur aurait été de créer une animation de transition entre celle d'arrière-plan et celle de l'interaction pour chaque vignette, mais évidemment c'est très fastidieux.

_________________
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
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 1278

Age : 27

Localisation : Condate

Date d'inscription : 01/08/2011


MessageSujet: Re: [résolu]Terminer une animation d'arrière plan avant un dialogue   Mer 21 Aoû 2013 - 21:10

Kitai a écrit:

Après j'imagine que la solution la plus agréable pour le joueur aurait été de créer une animation de transition entre celle d'arrière-plan et celle de l'interaction pour chaque vignette
Pas forcément, ce n'est l'affaire que d'une, deux ou maximum trois secondes, et si c'est cohérent je ne pense pas que ça soit gênant. En l'occurrence, pour le personnage concerné je trouve même ça assez rigolo qu'il finisse son action parce que ça correspond à sa personnalité.

Et puis comme tu le dis, faire 49 version de l'animation de transition pour gagner une ou deux secondes... perplexe 

_________________
"Je pense que la Terre tourne autour du soleil à une vitesse de 30 kilomètres par seconde et que je suis là, accroché à ce bolide de feu qui fonce d'un infini à un autre, accroché à une table, suspendu dans le vide, pendant que, sérieusement, drogué, abruti, inconscient, j'affirme que nous sommes désolés d'apprendre la perte d'un colis expédié le 4 et que nous ferons l'impossible pour réparer cet incident."

L'Employé, Jacques Sternberg.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 1278

Age : 27

Localisation : Condate

Date d'inscription : 01/08/2011


MessageSujet: Re: [résolu]Terminer une animation d'arrière plan avant un dialogue   Jeu 22 Aoû 2013 - 14:10

Et si je veux faire l'inverse ? A savoir annuler une fonction bloquante ? Là c'est un peu différent, ce que j'ai en tête c'est de pouvoir annuler une action en cours en cliquant ailleurs ?

J'ai essayé depasser par repeatedly_execute_always, mais le jeu crash quand je clique, car ça entre en conflit avec les fonctions bloquantes du module de Billbis (je crois). Peut-être que je n'ai pas codé ça comme il faut ? De mémoire ça donnait quelque chose comme ça :

Code:
if (mouse.IsButtonDown(eMouseLeft)) ProcessClick(mouse.x, mouse.y, mouse.Mode);
Je me doutais bien que ça ne marcherait pas mais bon...

_________________
"Je pense que la Terre tourne autour du soleil à une vitesse de 30 kilomètres par seconde et que je suis là, accroché à ce bolide de feu qui fonce d'un infini à un autre, accroché à une table, suspendu dans le vide, pendant que, sérieusement, drogué, abruti, inconscient, j'affirme que nous sommes désolés d'apprendre la perte d'un colis expédié le 4 et que nous ferons l'impossible pour réparer cet incident."

L'Employé, Jacques Sternberg.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
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]Terminer une animation d'arrière plan avant un dialogue   Jeu 22 Aoû 2013 - 17:41

valoulef a écrit:
J'ai essayé depasser par repeatedly_execute_always, mais le jeu crash quand je clique, car ça entre en conflit avec les fonctions bloquantes du module de Billbis (je crois)
De façon générale, on ne peut mettre aucune fonction bloquante dans repeatedly_execute_always. Donc si ton ProcessClick déclenche lui-même une action bloquante, il va y avoir conflit.

valoulef a écrit:
Et si je veux faire l'inverse ? A savoir annuler une fonction bloquante ? Là c'est un peu différent, ce que j'ai en tête c'est de pouvoir annuler une action en cours en cliquant ailleurs ?
Je ne pense pas qu'on puisse "arbitrairement" annuler une fonction bloquante "indéterminée" : le principe est justement que le script est bloqué jusqu'à la fin de l'exécution de la fonction.
Tu peux éventuellement essayer de fignoler un truc avec des StartCutscene et des EndCutscene mais je doute que ça ait l'effet que tu recherches.
À mon avis la solution la plus raisonnable est de ne pas passer par ne fonction bloquante. Si ton problème est de gérer les déplacements (par exemple lors d'un clic sur une zone interactive tu voudrais que le joueur s'y rende avant d'exécuter la suite du code), il y a plusieurs solutions, toutes consistant à ne pas véritablement utiliser de fonction bloquante pour le déplacement du personnage. Je ne détaille pas ici mais si tu as besoin de pistes n'hésite pas.

_________________
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
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 1278

Age : 27

Localisation : Condate

Date d'inscription : 01/08/2011


MessageSujet: Re: [résolu]Terminer une animation d'arrière plan avant un dialogue   Jeu 22 Aoû 2013 - 19:26

C'est ce post qui m'avais laissé pensé que c'était possible.

Mais c'est pas grave, il me semble que ça poserait pas mal de problème de ne pas utiliser de fonction bloquante (d'ailleurs je ne vois pas comment ça serait possible) notamment avec le module de Billbis. Donc je vais laisser tomber ça pour le moment. D'ailleurs j'ai bien plus grave maintenant vu que j'ai perdu une partie de mon code à cause d'une fausse manip pleure mais si je n'ai pas perdu plus que ce que je pense, ça devrait être vite réparé.

Merci en tout cas !

_________________
"Je pense que la Terre tourne autour du soleil à une vitesse de 30 kilomètres par seconde et que je suis là, accroché à ce bolide de feu qui fonce d'un infini à un autre, accroché à une table, suspendu dans le vide, pendant que, sérieusement, drogué, abruti, inconscient, j'affirme que nous sommes désolés d'apprendre la perte d'un colis expédié le 4 et que nous ferons l'impossible pour réparer cet incident."

L'Employé, Jacques Sternberg.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
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]Terminer une animation d'arrière plan avant un dialogue   Jeu 22 Aoû 2013 - 21:55

valoulef a écrit:
C'est ce post qui m'avais laissé pensé que c'était possible.
Je l'avais oublié ce sujet, mais c'est justement ce que j'allais chercher si tu m'avais demandé une piste.

valoulef a écrit:
il me semble que ça poserait pas mal de problème de ne pas utiliser de fonction bloquante (d'ailleurs je ne vois pas comment ça serait possible) notamment avec le module de Billbis. Donc je vais laisser tomber ça pour le moment.
Je ne comprends pas trop : quelle est le problème avec la solution proposée dans le sujet que tu as cité ? Tu peux remplacer la commande Walk par la commande de Billbis.
Cela-dit je me demande si la propriété Moving du joueur ne vaudra pas false lors de l'atteinte du point intermédiaire... Si c'est le cas, il te suffira d'exporter la variable U8D_noBlock du module et de la vérifier en plus de la propriété Moving.

valoulef a écrit:
D'ailleurs j'ai bien plus grave maintenant vu que j'ai perdu une partie de mon code à cause d'une fausse manip pleure mais si je n'ai pas perdu plus que ce que je pense, ça devrait être vite réparé.
Je compatis, mais rien de tel pour s'exercer et obtenir un code encore plus propre !

_________________
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
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 1278

Age : 27

Localisation : Condate

Date d'inscription : 01/08/2011


MessageSujet: Re: [résolu]Terminer une animation d'arrière plan avant un dialogue   Ven 23 Aoû 2013 - 0:45

Kitai a écrit:

Je ne comprends pas trop : quelle est le problème avec la solution proposée dans le sujet que tu as cité ?
A vrai dire je n'avais même pas vu que ce sujet proposait une solution à mon problème ^^. En fait je parcourais les vieux topics d'entraide la nuit dernière, et j'étais tombé sur le message de CrazyLegs laissant entendre qu'on pouvait annuler une action en cours (enfin ce qu'éventuellement j'aimerai bien faire quoi). Mais comme ce n'était pas le sujet principal, et que j'avais juste survolé le sujet, je ne suis pas allé plus loin et j'ai juste retrouvé le message après... Bref, cette solution est très intéressante en tout cas, à ceci près qu'elle implique que le mouvement du personnage soit automatisé pour toutes les interactions. Or, je gère cela au cas par cas, et les déplacements sont donc codés à l'intérieur des events. Pour les situations simples, je pourrais détourner le problème en faisant par exemple appel aux propriétés personnalisés pour entrer les coordonnées de déplacement, mais comme tu n'est pas sans savoir que j'ai quelques soucis de pathfinding, il arrive qu'à l'intérieur des events je prévoie plusieurs chemins et même des points intermédiaires (oui oui, en plus de l'U8D_Walk ^^) selon la position initiale du personnage. Bref, c'est assez compliqué de généraliser le comportement du personnage pour tous les éléments interactifs. Tu me diras, je pourrais toujours gérer ces cas particuliers dans la fonction on_mouse_click (par exemple) plutôt que dans les events. Pourquoi pas, je me pencherai dessus sourire

_________________
"Je pense que la Terre tourne autour du soleil à une vitesse de 30 kilomètres par seconde et que je suis là, accroché à ce bolide de feu qui fonce d'un infini à un autre, accroché à une table, suspendu dans le vide, pendant que, sérieusement, drogué, abruti, inconscient, j'affirme que nous sommes désolés d'apprendre la perte d'un colis expédié le 4 et que nous ferons l'impossible pour réparer cet incident."

L'Employé, Jacques Sternberg.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
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]Terminer une animation d'arrière plan avant un dialogue   Ven 23 Aoû 2013 - 10:14

J'ai peut-être une solution pour toi, mais ça dépend du comportement effectif de Walk : l'idée c'est de lancer le déplacement en arrière-plan (en supposant que ça n'attende pas la fin d'exécution de la routine) puis de boucler sur la vérification de Moving. Je te donne l'idée :
Code:
// Retournera TRUE si le joueur clique durant le déplacement du personnage, FALSE autrement
bool ClickDuringWalk(this Character*) {
  // Si le clic est maintenu, il faudra attendre le relâchement
  bool clic_maintenu = mouse.IsButtonDown(eMouseLeft);
  // Tant que le personnage se déplace, on va vérifier le clic
  while (this.Moving) {
    // Si le joueur clique, on retourne TRUE (clic lors du déplacement)
    if (!clic_maintenu && mouse.IsButtonDown(eMouseLeft)) return true;
    // Si le joueur relâche le clic, on le note
    else if (clic_maintenu && !mouse.IsButtonDown(eMouseLeft)) clic_maintenu = false;
    Wait(1);
    }
  }
  // Le personnage ne se déplace plus, on retourne FALSE (pas de clic lors du déplacement)
  return false;
}

// Dans la fonction de ton événement...
player.Walk(100, 100, eNoBlock); // On déplace en arrière-plan
if (player.ClickDuringWalk()) { // S'il y a un clic durant le déplacement
  player.StopMoving(); // On fige le personnage
  return; // Et on cesse l'événement
}
// La suite de ton événement s'il n'y a pas eu de clic...
Je n'ai pas testé ce code, dis-moi ce qu'il en est.

_________________
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
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 1278

Age : 27

Localisation : Condate

Date d'inscription : 01/08/2011


MessageSujet: Re: [résolu]Terminer une animation d'arrière plan avant un dialogue   Ven 23 Aoû 2013 - 14:27

Bon, j'ai mis un certain temps avant de comprendre ce code, mais je l'ai compris en testant. Contrairement à ce que je pensais, ça marche bien.

Le seul truc qui me rebute, c'est que ça implique d'ajouter le code à chaque event. Tant qu'à faire, je préfèrerai que ce comportement soit automatisé. J'ai tenté un truc en remplaçant la fonction Walk ou U8D_Wallk par une autre fonction y faisant appel, comme ceci :

Code:
function Marche (this Character*, int x, int y) {
cEgo.Walk(x, y, eNoBlock);
if (player.ClickDuringWalk()) { // S'il y a un clic durant le déplacement
  player.StopMoving(); // On fige le personnage
  ProcessClick(mouse.x, mouse.y, mouse.Mode);
}
}
Ça marche pas trop mal, mais deux choses :
- Cette fonction n'est pas très compatible avec l'U8D_Walk. Pour plusieurs raisons, et notamment je crois que la première partie du trajet de l'U8D_Walk est toujours bloquante (edit : bizarrement, cela n'a pas l'air d'être le cas). Il faudrait alors passer par une modification de l'U8D_Walk (je m'y essaierai peut-être, on verra bien).
- ProcessClick(mouse.x, mouse.y, mouse.Mode); fonctionne très bien sur tous les modes de curseur SAUF quand le curseur est en mode WalkTo (il faut cliquer une deuxième fois pour déclencher un nouveau déplacement après avoir annulé le déplacement en cours)... Là encore, ça vient peut-être de l'U8D_Walk, mais enfin c'est quand même un peut bizarre.

Ah, une dernière petite question. Dans ta fonction "ClickDuringWalk", le "Wait(1)" est exécuté à chaque fois qu'on vérifie ce qu'elle retourne ? Je ne comprends pas exactement comment il agit... Et pourtant je vois bien qu'il est nécessaire, car il permet d'attendre que le déplacement soit terminé avant d'exécuter la suite de l'évènement.

EDIT : en testant avec le debug_mode, j'ai mieux compris. En fait c'est logique, quand on vérifie "ClickDuringWalk" on fait appel à "Wait" tant que le personnage est en mouvement. Ensuite, j'imagine que dès que "true" est retourné, la vérification s'arrête là.

_________________
"Je pense que la Terre tourne autour du soleil à une vitesse de 30 kilomètres par seconde et que je suis là, accroché à ce bolide de feu qui fonce d'un infini à un autre, accroché à une table, suspendu dans le vide, pendant que, sérieusement, drogué, abruti, inconscient, j'affirme que nous sommes désolés d'apprendre la perte d'un colis expédié le 4 et que nous ferons l'impossible pour réparer cet incident."

L'Employé, Jacques Sternberg.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
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]Terminer une animation d'arrière plan avant un dialogue   Ven 23 Aoû 2013 - 20:03

Je sort de ma grotte où je passe mes vacances pour réagir :
valoulef a écrit:
- ProcessClick(mouse.x, mouse.y, mouse.Mode); fonctionne très bien sur tous les modes de curseur SAUF quand le curseur est en mode WalkTo (il faut cliquer une deuxième fois pour déclencher un nouveau déplacement après avoir annulé le déplacement en cours)... Là encore, ça vient peut-être de l'U8D_Walk, mais enfin c'est quand même un peut bizarre.
Ca vient d'AGS, pas de mon module. sourire
Tu as une option du General Setting, Character movement, Automatically move the player in Walk mode que tu peux mettre en false.
Bon courage avec tout ce code !

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nothingaboutthedog.blogspot.fr/
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]Terminer une animation d'arrière plan avant un dialogue   Ven 23 Aoû 2013 - 21:25

valoulef a écrit:
- Cette fonction n'est pas très compatible avec l'U8D_Walk. Pour plusieurs raisons, et notamment je crois que la première partie du trajet de l'U8D_Walk est toujours bloquante (edit : bizarrement, cela n'a pas l'air d'être le cas). Il faudrait alors passer par une modification de l'U8D_Walk (je m'y essaierai peut-être, on verra bien).
Je ne crois pas non plus que U8D_Walk soit bloquante (pas même à la première étape) si tu passes le paramètre eNoBlock. En revanche permets moi de te rappeler cette partie de mon message plus haut :
Kitai a écrit:
Cela-dit je me demande si la propriété Moving du joueur ne vaudra pas false lors de l'atteinte du point intermédiaire... Si c'est le cas, il te suffira d'exporter la variable U8D_noBlock du module et de la vérifier en plus de la propriété Moving.
Tu obtiendrais alors un while avec cette tête là :
Code:
while (player.Moving || U8D_noBlock) {
valoulef a écrit:
Ah, une dernière petite question. Dans ta fonction "ClickDuringWalk", le "Wait(1)" est exécuté à chaque fois qu'on vérifie ce qu'elle retourne ? Je ne comprends pas exactement comment il agit... Et pourtant je vois bien qu'il est nécessaire, car il permet d'attendre que le déplacement soit terminé avant d'exécuter la suite de l'évènement.

EDIT : en testant avec le debug_mode, j'ai mieux compris. En fait c'est logique, quand on vérifie "ClickDuringWalk" on fait appel à "Wait" tant que le personnage est en mouvement. Ensuite, j'imagine que dès que "true" est retourné, la vérification s'arrête là.
Le Wait est là pour  ne pas freezer le jeu : si on cycle la boucle sans attendre, il n'y a pas de progression, le personnage n'avance pas et la propriété Moving vaut incessamment true.
La commande return a pour effet de sortir immédiatement de la fonction dans laquelle on se trouve, et donc en effet lorsqu'on retourne true on cesse toute vérification éventuelle.

EDIT : En fait tu utilises toi-même cette méthode dès ton premier message !

Re-EDIT : Oublie pas de placer une instruction return dans la fonction correspondant à ton événement afin de cesser son exécution si le joueur clique ailleurs entre-temps. Quelque chose comme ça (en supposant que tu transformes ta fonction Marche en booléenne qui ne retourne true que s'il n'y a pas eu de clic) :
Code:
// Dans ton événement
if (!player.Marche(200, 150)) return;
// Suite de ton événement
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 1278

Age : 27

Localisation : Condate

Date d'inscription : 01/08/2011


MessageSujet: Re: [résolu]Terminer une animation d'arrière plan avant un dialogue   Jeu 24 Oct 2013 - 14:51

Dites moi, est-ce qu'il y aurait moyen, d'une manière ou d'une autre, de vérifier non pas le numéro de la vignette dans telle séquence qu'utilise actuellement le personnage, mais le numéro de l'image, correspondant à son emplacement dans les ressources ?

J'imagine qu'il faudrait coder quelque chose à partir de ViewFrame.Graphic ? Je vais essayer ça...

EDIT : Votre temps imparti est écoulé, la réponse était :
Code:
int Image(this Character*) {
  ViewFrame* image = Game.GetViewFrame(this.View, this.Loop, this.Frame);
  return image.Graphic;  
}
Simple, en fait... Oui bon, encore une fois je me réponds tout seul, mais c'est le syndrome de la question posée sur le forum, ça me fait ça une fois sur 2 j'y peux rien pleure Oui parce que j'ai trouvé ViewFrame.Graphic après avoir posé la question, sinon je ne l'aurais pas posée...

Cela dit j'ai quand même une question : Je me suis vu refuser un readonly que je voulais mettre avant int (un peu pour me la péter mais avouez qu'il y avait une certaine logique). Pourquoi cela ne marche pas ?

_________________
"Je pense que la Terre tourne autour du soleil à une vitesse de 30 kilomètres par seconde et que je suis là, accroché à ce bolide de feu qui fonce d'un infini à un autre, accroché à une table, suspendu dans le vide, pendant que, sérieusement, drogué, abruti, inconscient, j'affirme que nous sommes désolés d'apprendre la perte d'un colis expédié le 4 et que nous ferons l'impossible pour réparer cet incident."

L'Employé, Jacques Sternberg.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
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]Terminer une animation d'arrière plan avant un dialogue   Jeu 24 Oct 2013 - 16:11

valoulef a écrit:
Cela dit j'ai quand même une question : Je me suis vu refuser un readonly que je voulais mettre avant int (un peu pour me la péter mais avouez qu'il y avait une certaine logique). Pourquoi cela ne marche pas ?
Je ne pourrais pas te l'expliquer très en détails, juste te décrire dans quelles situations tu peux et dans quelles situations tu ne peux pas.
J'imagine que ta logique était "Je ne pourrai jamais assigner moi-même de façon arbitraire la valeur que Image retournera, tout ce que je pourrai faire c'est consulter cette valeur et rien d'autre, donc lecture seule : readonly".
Seulement dans une certaine mesure c'est déjà dans le concept même de fonction d'uniquement retourner une valeur : on ne peut jamais assigner une valeur à une fonction (pas avec AGS en tout cas).
En fait readonly n'a de sens que lorsqu'il précède un élément dont tu pourrais éventuellement choisir de modifier la valeur, c'est-à-dire une variable ou un attribut. Je ne sais pas dans quelle mesure une fonction est un objet différent d'une variable ou d'un attribut pour AGS et du coup je ne sais pas non plus dans quelle mesure il est préférable d'interdire purement et simplement à l'utilisateur de faire précéder la définition d'une fonction du mot-clé readonly plutôt que l'avertir de la "redondance" de sa démarche.

Note que des variables peuvent prendre des fonctions comme valeur dans certains langages, comme en Javascript par exemple : dans ce langage, tu fais quelque chose comme ça
Code:
var maFonction =
function(argument1, argument2) {
   return argument1 + " fout la pâtée à " + argument2;
 };

alert(maFonction("J.","Harry");
Dans ce cas ça aurait un sens d'imaginer un readonly devant maFonction, mais Javascript est un langage très ouvert (un peu comme Python) et ne possède donc pas de mot-clé readonly.

_________________
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
Contenu sponsorisé




MessageSujet: Re: [résolu]Terminer une animation d'arrière plan avant un dialogue   Aujourd'hui à 19:15

Revenir en haut Aller en bas
 
[résolu]Terminer une animation d'arrière plan avant un dialogue
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» CAW : Arrière plan
» [RESOLU] Faire un arrière plan en relief
» [RESOLU] Création d'avant, et d'arrière plans
» [RESOLU] Aides diverses
» Petite scène amusante en arrière-plan : p

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: