2009-06-05 14 views
0

Je voudrais retarder la gestion de certains événements capturés dans ActionScript jusqu'à un certain moment. En ce moment, je les mets dans un tableau quand ils sont capturés et passons en revue quand cela est nécessaire, mais cela semble inefficace. Y a-t-il une meilleure manière de faire cela?Retarder la gestion des événements dans Flash

+0

modifié après ... l'espoir que les réponses que vous question ... :) – back2dos

+0

Je devine que ce ne sont pas des événements, mais l'interface utilisateur fichier chargement des événements de type complet? onsoundcomplete comme? – Assembler

+0

Merci, dos! Assembleur, c'est pour un jeu de plateformes à verrouillage de trame. Je veux que tous les événements d'entrée soient traités au début de chaque nouvelle image. – Archagon

Répondre

2

Eh bien, pour moi, cela semble une façon propre et efficace de le faire.
Que voulez-vous dire en retardant? vous voulez dire simplement les traiter plus tard, ou les traiter après un temps donné?

Vous pouvez toujours définir un délai pour la fonction de traitement réelle dans votre gestionnaire d'événements (en utilisant flash.utils.setTimeout), pour traiter l'événement à un moment précis dans le temps. Mais cela peut devenir inefficace, car il se peut que vous ayez beaucoup de temps morts qui doivent être gérés par le moteur d'exécution.

Peut-être pourriez-vous préciser un peu plus vos besoins.

modifier:

Ok, essentiellement, flash player est un seul thread - qui est l'exécution de bytecode est un seul thread. Et tout événement, qui est distribué, est traité immédiatement, c'est-à-dire que dispatchEvent(someEvent) appellera directement tous les gestionnaires enregistrés (donc AS bytecode).

Il existe maintenant des événements qui sont générés en arrière-plan. Ceux-ci proviennent soit d'E/S (réseau, userinput) ou de minuteries (TimerEvents). Il peut arriver que certains de ces événements se produisent, alors que bytecode est exécuté. Cela se produit généralement dans un thread d'arrière-plan qui transmet l'événement (au sens abstrait du terme) au thread principal via une file d'attente (de). Si le thread principal est occupé à exécuter le bytecode, alors il ignorera ces messages jusqu'à ce que cela soit fait (remarque: presque toute exécution de bytecode est toujours la conséquence implicite d'un événement (que ce soit entre frame, input, timer ou opération de chargement ou autre)). Lorsqu'il est inactif, il recherche dans toutes les files d'attente jusqu'à ce qu'il trouve un message disponible, encapsule les informations dans un objet événement ActionScript et les distribue comme décrit précédemment.

Cette mise en file d'attente est donc un mécanisme de très bas niveau, qui vient de la communication de thread à thread (et apparaît dans de nombreux scénarios multithread), et est inaccessible pour vous.

Mais comme je l'ai déjà dit, votre approche est à la fois valide et logique.

+0

Les traiter plus tard, à ma propre discrétion. Je ne suis pas sûr, mais j'ai entendu dire que les événements nécessitant un traitement sont déjà stockés dans une sorte de file d'attente. Y at-il un moyen d'accéder directement à cette file d'attente, au lieu de se fier à une seconde file d'attente? – Archagon

0

les stocker dans le vecteur au lieu de tableau: p

Je pense qu'il est tout au sujet de la façon dont vous structurez votre programme, peut-être vous pouvez affecter l'événement capturé sous l'instance liée? Alors qu'il est tout naturel pour traiter l'événement capturé avec elle au lieu d'interroger à partir d'un vecteur global

Questions connexes