2009-06-05 89 views
0

我想延迟对ActionScript中某些捕获的事件的处理,直到某个时间。现在,我将它们在捕获时粘在一个数组中,并在需要时通过它,但这似乎效率低下。有一个更好的方法吗?在Flash中延迟事件处理

+0

后编辑...希望你回答你的问题... :) – back2dos 2009-06-07 15:29:37

+0

我猜这些不是UI事件,但文件加载完整的类型事件? onsoundcomplete像? – Assembler 2009-06-08 01:44:21

回答

2

对我来说,这似乎是一种干净而有效的方式。
延迟是什么意思?你的意思是简单地处理它们,或者在给定的时间之后处理它们?

您可以随时在事件处理函数中使用实际处理函数(使用flash.utils.setTimeout)设置一个timout,以便在某个精确时刻处理事件。但是这可能变得效率低下,因为你可能有很多超时时间很危险,需要由运行时处理。

也许你可以指定你的需求多一点。

编辑:

好了,基本上,Flash播放器是单线程的 - 那就是字节码执行是单线程。并且任何被派遣的事件立即被处理,即dispatchEvent(someEvent)将直接调用所有注册的处理程序(因此AS字节码)。

现在有事件,实际上是在后台生成的。这些来自I/O(网络,用户输入)或定时器(TimerEvents)。可能会发生这些事件中的一些实际发生,而字节码被执行。这通常发生在后台线程中,后台线程通过(de)队列将事件(抽象意义上的术语)传递给主线程。如果主线程忙于执行字节码,那么它将在完成之前忽略这些消息(注意:几乎任何字节码的执行总是事件的隐含结果(不管它是输入帧还是输入或定时器)或加载操作或其他))。当它闲置时,它将查看所​​有队列,直到找到可用消息,将信息包装到ActionScript Event对象中,并按前面所述分派它。

因此,这个队列是一个非常低层次的机制,它来自线程间通信(并且出现在许多多线程场景中),并且无法访问到您。

但正如我之前所说的,你的方法都是有效的和合理的。

0

存储它们到载体,而不是数组:P

我认为这是所有关于你如何组织你的程序,也许你可以将相关情况下捕获的事件?所以,它是所有自然处理捕获的事件,而不是从全球矢量查询