[Resolu][MY-AL]Petit probleme avec invokeRepeating

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
desolox
Messages : 36
Inscription : 13 Juil 2016 22:55

[Resolu][MY-AL]Petit probleme avec invokeRepeating

Message par desolox » 26 Oct 2016 18:46

Bonjour, je viens vous demander une réponse a une question que je me pose ... :]

Est-il possible de passer en paramètre d'une invokerepeating une méthode se trouvant sur un autre script ???

exemple:

Code : Tout sélectionner

Perso perso = new Perso();

void Start(){
InvokeRepeating ("perso.test", .1f, .5f );
}
pour le moment le seul moyen que j'ai trouvé est de recopier la méthode de la classe perso dans celle ou je lance l'invoke mais sa ne me conviens que moyennement ...

exemple qui fonctionne...

Code : Tout sélectionner

Perso perso = new Perso();

void Start(){
InvokeRepeating ("test", .1f, .5f );
}

void test(){
perso.test();
}
Est-il possible d'arriver a ce que je souhaite d'une autre manière (sans recopier la méthode ( en l'appelant directement ?))
merci d'avance :merci:
Dernière édition par desolox le 27 Oct 2016 15:36, édité 1 fois.

Avatar de l’utilisateur
NDrew
Messages : 581
Inscription : 25 Oct 2013 15:14
Localisation : Clermont-Ferrand

Re: [MY-AL]Petit probleme avec invokeRepeating

Message par NDrew » 26 Oct 2016 19:39

pas avec invoke, mais avec un startCoroutine sur une méthode de l'autre objet qui invoquerait avec un waitForSecond dans la coroutine ca pourrait fonctionner.

desolox
Messages : 36
Inscription : 13 Juil 2016 22:55

Re: [MY-AL]Petit probleme avec invokeRepeating

Message par desolox » 26 Oct 2016 20:12

Merci NDrew pour cette réponse rapide :)

j'ai essayer avec les coroutines mais le problème c'est qu'une fois que la couroutine est stop je peux plus la relancer comme l'invokeRepeating d’où mon utilisation de l'invoke.
je souhaite pouvoir l’arrêter et la relancer a souhait et j'ai pas l'impression que l'on puisse avec les coroutines (enfin j'en suis pas encore sur a 100%)

mais au pire tan pis je continuerai comme je fais en recopiant la méthode même si sa m’embête un peu :pleur4:

Avatar de l’utilisateur
NDrew
Messages : 581
Inscription : 25 Oct 2013 15:14
Localisation : Clermont-Ferrand

Re: [MY-AL]Petit probleme avec invokeRepeating

Message par NDrew » 26 Oct 2016 21:09

Tu peux le faire avec une coroutine

Il suffit de faire une routine qui met une variable a true au lancement, et qui boucle tant que cette variable est true. Pour arreter la coroutine, on met cette variable a faux. Cela permet egalement de s'assurer qu'elle ne soit lancer qu'une fois.

desolox
Messages : 36
Inscription : 13 Juil 2016 22:55

Re: [MY-AL]Petit probleme avec invokeRepeating

Message par desolox » 27 Oct 2016 11:08

oui c'est bien ce que je dis on peut pas la RE-lancer on la démarre et on la stop a un moment (ou pas on peut la laisser a l'infini) mais moi je souhaite la démarrer l’arrêter puis la relancer et l’arrêter de nouveau et la reredémarrer :-D etc... et je ne pense pas pouvoir le faire avec une coroutine (enfin j'ai pas réussi pour le moment)

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [MY-AL]Petit probleme avec invokeRepeating

Message par boubouk50 » 27 Oct 2016 11:33

InvokeRepeating n'est rien d'autre qu'une fonction qui lance une autre fonction à un intervalle donné.
Pour recréer cette méthode, il te suffit de créer un timer qui lance une fonction à chaque fois qu'il a atteint sa durée. Ce n'est pas compliqué. Cherche un peu sur le forum, la question du timer a été répondu moult fois.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

desolox
Messages : 36
Inscription : 13 Juil 2016 22:55

Re: [MY-AL]Petit probleme avec invokeRepeating

Message par desolox » 27 Oct 2016 11:54

Le problème n'est pas l'intervalle sa c'est bon je sais le faire. Soit avec un timer dans l'update ou alors avec une coroutine ou même avec invokerepeating tu n'a pas du lire mon 1er message mais tan pis ...

en utilisant la méthode de mon 1er post tout fonctionne

Code : Tout sélectionner

Perso perso = new Perso();

void Start(){
InvokeRepeating ("test", .1f, .5f );
}

void test(){  
perso.test(); 
}
// mais je suis obligé de copier cette méthode c'est juste sa mon problème c’était juste pour savoir si il y avait mieux car dans l’état sa fonctionne 
je voulais juste savoir si je pouvais lancer l'invoke de la méthode se trouvant sur un autre script sans devoir recopier la méthode mais a parement ce n'est pas possible tan pis... pour le moment je continuerai comme ça jusqu’à tombé sur mieux comme a chaque fois ^^

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [MY-AL]Petit probleme avec invokeRepeating

Message par boubouk50 » 27 Oct 2016 12:10

Si, j'ai bien lu. J'ai pas été très explicatif, je reconnais.
Tu n'as pas de problème avec InvokeRepeating (ton titre) mais avec la communication entre scripts.
Tu peux très bien lancer une fonction depuis un script vers un autre, InvokeRepeating ou non. Soit tu appelles une fois depuis le Start une fonction de l'autre script qui elle fait l'InvokeRepeating sur la fonction de ton choix (elle sera donc dans le même script), soit tu crées ta propre fonction (similaire à InvokeRepeating, ce que je te répondais) qui fera appel à cette fonction de l'autre script.
L'idée n'étant pas de passer par InvokeRepeating, mais par ta propre fonction qui fera appel à la fonction contenue dans un autre script. Là encore, de nombreux posts sont présents sur le forum pour cette communication entre scripts.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

desolox
Messages : 36
Inscription : 13 Juil 2016 22:55

Re: [MY-AL]Petit probleme avec invokeRepeating

Message par desolox » 27 Oct 2016 14:28

ok merci pour cette précision du coup c'est ma faute je n'ai pas étais assez explicatif

je souhaite dans le start lancer une méthode qui se trouve sur un autre script (cela est plutôt simple et je sais le faire)
cette méthode dois pouvoir: se lancer, s’arrêter, se lancer de nouveau puis s’arrêter encore et ainsi de suite etc...
le script ou ce trouve la méthode n’hérite pas de monoB.

je ne souhaite pas utiliser l'update !! car je trouve dommage d'utiliser l'update quand une méthode est censé être souvent a l’arrêt.

quand la méthode ne se lance qu'une fois je passe par des évents en général mais la l'invokerepeating est vraiment top car en la mettant dans le start je peux la lancer et l’arrêter autant que je veux de manière simple

en gros mon problème est juste de faire démarrer et s’arrêter puis recommencer bref sa vous avez compris ^^ uniquement dans le start comme le fait invokeRepeating mais invokerepeating prend la méthode en paramètre sous forme de string et j'aurais aime pouvoir lui mettre une méthode se trouvant ailleurs

avec les coroutines c'est possible mais je n'arrive pas a faire redémarrer ma coroutine dans le strat une fois quelle est stop

mais bon encore une fois je n'ai pas de vrai problème puisque en recopiant la méthode la ou se trouve l'invoke au final sa fonctionne bien
mais j'imaginai qu'on pouvais faire mieux ... peut être qu'un jour je comprendrai ^^ car je vois bien que tu essaye de m'aider mais j'ai du mal a comprendre
soit tu crées ta propre fonction (similaire à InvokeRepeating, ce que je te répondais) qui fera appel à cette fonction de l'autre script.
la seul chose qu'y pourrai ressembler a ce que je souhaite serait de mettre une coroutine qui se déclenche sur un event, sa fonctionnerai sans l'update tout en pouvant être stop et relancer a ma guise mais du coup je préfère juste recopier ma méthode dans le script ou est l'invoke ^^

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [MY-AL]Petit probleme avec invokeRepeating

Message par boubouk50 » 27 Oct 2016 15:31

desolox a écrit :uniquement dans le start comme le fait invokeRepeating
C'est ça que je ne pige pas.
Le Start () n'est appelé qu'une seule fois à la fin de chargement d'une scène. Tu ne peux pas le stopper ou le relancer, mis à part recharger la scène. Qu'est ce qui t'empêche de faire ta propre fonction?
Aussi, si tu veux le stopper et le relancer à ta guise, c'est bien qu'à un moment donné, tu l'as déterminé, non? Même si c'est aléatoire. Je veux dire par là que tu as le contrôle par rapport à InvokeRepeating (). Donc tu peux appeler la fonction comme tu veux, c'est mieux que InvokeRepeating ().
Il y a quelque chose qui m'échappe ou quelque chose qui t'échappe.

Si tu veux pas utiliser l'Update (), tu peux créer une coroutine et utiliser yield return new WaitForSeconds () dans une boucle avec un booléen pour en sortir à tout moment.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Répondre

Revenir vers « (C#) CSharp »