2009-06-03 6 views
0

Je suis en train de construire une structure pour charger des mini-jeux (en swf), et je rencontre un problème.Comment faire pour mettre en file d'attente plusieurs événements à un seul eventHandler dans actionscript 3?

J'ai actuellement un écouteur qui écoute les événements que le mini-jeu enfant envoie à l'infrastructure parent. Cependant, si l'enfant envoie deux messages (événements) trop proches les uns des autres, il semble que le premier événement soit simplement ignoré, ce qui fait que certains des messages n'atteignent pas du tout le cadre parent. J'ai lu que vous pouvez mettre en file d'attente des événements actionscript d'une façon ou d'une autre, de sorte que les événements sont traités dans une base FIFO. Comment puis je faire ça? La documentation semble être assez rare pour ce problème, alors je suis perplexe.

Merci beaucoup!

+1

hmmm ... ce qui est vraiment étrange ... AVM2 seul thread ... si vous décomposez un événement, puis toutes les fonctions de gestionnaire sont appelés avant l'exécution continue ... pourrait vous le réduire et poster configuration minimale pour reproduire le problème? greetz back2dos – back2dos

+0

Ya, on dirait qu'il y a quelque chose d'autre qui se passe ici. Peut-être poster votre code d'expédition d'événement, et expliquer la structure un peu. Sont-ils expédiés du même endroit de la même manière? –

+0

Une enquête plus poussée, il semble que j'ai envoyé un événement qui a tué le swf enfant avant qu'il ait une chance d'envoyer l'autre message (puisque AVM2 est single threaded). Donc problème résolu! Merci de votre aide. – futureelite7

Répondre

2

Vous devriez vraiment poster du code avec des questions comme celle-ci; les autres ont raison - on dirait que vous avez fait une erreur quelque part, et il est beaucoup plus facile d'aider avec ce genre de problèmes lorsqu'ils sont accompagnés d'un code.

Cela dit, même si vous EXPEDIE vos événements dans une boucle serrée, comme ceci:

addEventListener("foo", handleFoo, false, 0); 

for (var i:int = 0; i < 100; i++) 
{ 
    dispatchEvent(new FlexEvent("foo")); 
} 

private function handleFoo(event:Event):void 
{ 
    trace("hello"); 
} 

... vous verriez autant de « bonjours » comme itérations de cette boucle; ça ne se rapproche pas beaucoup plus que ça. Par exemple, cet écouteur est appelé en premier (d'où le "0" ci-dessus), cet autre écouteur est appelé second ("1"), et ainsi de suite - en utilisant l'argument priority de la fonction addEventListener (encore une fois, voir ci-dessus), mais c'est à peu près tout. Il n'y a pas de file d'attente intégrée pour l'envoi d'événements à moins que vous n'écriviez la file d'attente vous-même.