Callback non appelée

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
Override
Messages : 143
Inscription : 04 Nov 2016 20:08

Callback non appelée

Message par Override » 19 Avr 2018 13:20

Bon les amis j'ai un sacré problème. Le truc c'est que j'ai fait un spawner très fonctionnel avec des tas d'options, tout marche, très optimisé c'est vraiment pas mal, mais voilà le hic. Quand un enemi meurt, il appelle une fonction ondeath du spawner qui diminue une int, enemiesNumber.

Sauf que je me suis rendu compte que lorsque que parfois, la fonction n'était pas appelée et que donc, la variable indiquait 5 enemis restant alors que sur la Map non, y sont tous mort .

Alors bon j'ai bidouillé, j'ai trouvé un moyen de contourner en mettant les enemis dans une liste mais c'est vraiment pas ce que je veut...

Si vous avez une idée de pourquoi ?

Pour préciser le code, l'enemi stock en variables la fonction onDeath eu spawner et il l'appelle au moment de sa mort. Enft je me suis dit que l'enemi pouvait être détruit avant d'appeler la fonction mais bon au niveau du code, c'est prononcé après alors je comprends pas...

Voilà merci en tout cas pour avoir lu
:merci:

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: Callback non appelée

Message par Max » 19 Avr 2018 13:30

et le(s) code(s) sont ... ?
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Override
Messages : 143
Inscription : 04 Nov 2016 20:08

Re: Callback non appelée

Message par Override » 19 Avr 2018 13:50

Hum et bien y'a pas mal d'héritence donc en gros :

Du point de vu du spawner :

Code : Tout sélectionner

Int enemiesNumber;
Void OnEnemyDeath () {
enemiesNumber--;
}

Void SpawnEnemy () {
NewEnemy.onDeath = OnEnemyDeath;
}
Du point de vue de l'Enemy :

Code : Tout sélectionner

public System.Action onDeath;

Public override void Death () {
onDeath ();
base.Death (); => fonction qui le fait s'autodétruire
}
Je pense que tu doit connaître ce système, je crois qu'il s'utilise pas mal
:merci:

Avatar de l’utilisateur
DevAmat
Messages : 435
Inscription : 23 Nov 2016 11:50

Re: Callback non appelée

Message par DevAmat » 20 Avr 2018 10:08

J'ai pas tout saisi, tu passes par une delegate?
Et ton enemy lorsqu'il est "dead" il est delete et tu instancies à chaque nouvel enemy? Ou tu passes par un pool d'objet?

Répondre

Revenir vers « (C#) CSharp »