Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash EnterFrame事件的排序_Flash_Actionscript 3_Events - Fatal编程技术网

Flash EnterFrame事件的排序

Flash EnterFrame事件的排序,flash,actionscript-3,events,Flash,Actionscript 3,Events,如果我已将Event.ENTER_FRAME侦听器添加到不同的组件,我如何设置或知道在每个enterFrame上何时触发这些事件的顺序 与其向单个元素添加enterFrame侦听器,不如让一个元素侦听enterFrame事件,并在enterFrame上有一个需要更新的元素数组,因此可以很容易地组织和更改这些事件的触发顺序?这可能是基于您订阅事件的顺序,因为它被添加到触发事件时可能循环通过的集合中,但我不相信这一点,因为文档并不能保证这一点 我将创建自己的委托集合,让事件的一个订阅者遍历您自己的集

如果我已将Event.ENTER_FRAME侦听器添加到不同的组件,我如何设置或知道在每个enterFrame上何时触发这些事件的顺序


与其向单个元素添加enterFrame侦听器,不如让一个元素侦听enterFrame事件,并在enterFrame上有一个需要更新的元素数组,因此可以很容易地组织和更改这些事件的触发顺序?

这可能是基于您订阅事件的顺序,因为它被添加到触发事件时可能循环通过的集合中,但我不相信这一点,因为文档并不能保证这一点


我将创建自己的委托集合,让事件的一个订阅者遍历您自己的集合,调用每个委托,等待它返回,然后调用下一个委托,而不是事件的顺序。这样你就可以确定事件的顺序。我只是想在这些事情上更加谨慎。

这可能是基于您订阅事件的顺序,因为它被添加到一个集合中,该集合可能在触发事件时循环通过,但我不相信这一点,因为文档并不能保证这一点


我将创建自己的委托集合,让事件的一个订阅者遍历您自己的集合,调用每个委托,等待它返回,然后调用下一个委托,而不是事件的顺序。这样你就可以确定事件的顺序。我只是想在这些事情上更加谨慎。

您不能保证事件侦听器的执行顺序

。。。让一个元素监听enterFrame事件,并且有一个需要在enterFrame上更新的元素数组,这是更好的做法吗

这实际上取决于用例。在某些情况下,例如粒子系统,可能是的。如果有几十个对象组成一个逻辑集,那么在单个管理器类型类中执行大部分集合逻辑通常是有意义的。这可能包括一个特定于集合的更新循环。这通常可以为您节省相当多的开销

同样,如果您所做的只是:

function managerUpdate(event:Event):void
{
    for(var thing:Object in set)
    {
        thing.update();
    }
}
那么你根本就没有节省那么多开销。当然,在上述情况下,您可以控制集合的顺序。您还可以逐帧剔除它

还考虑是否有计算或其他算法可以从集合实例更新中升至一个管理器并通过参数。


如果没有关于您的特定用例的更多信息,我就不能更具体了。

您不能保证事件侦听器的执行顺序

。。。让一个元素监听enterFrame事件,并且有一个需要在enterFrame上更新的元素数组,这是更好的做法吗

这实际上取决于用例。在某些情况下,例如粒子系统,可能是的。如果有几十个对象组成一个逻辑集,那么在单个管理器类型类中执行大部分集合逻辑通常是有意义的。这可能包括一个特定于集合的更新循环。这通常可以为您节省相当多的开销

同样,如果您所做的只是:

function managerUpdate(event:Event):void
{
    for(var thing:Object in set)
    {
        thing.update();
    }
}
那么你根本就没有节省那么多开销。当然,在上述情况下,您可以控制集合的顺序。您还可以逐帧剔除它

还考虑是否有计算或其他算法可以从集合实例更新中升至一个管理器并通过参数。 如果没有关于您的特定用例的更多信息,我就不能说得更具体。

您可以对事件侦听器进行优先级排序,从而对它们的执行进行排序。使用addEventListener()的第四个属性,这是一个指示优先级的整数。添加了高优先级整数的事件侦听器将在优先级较低的事件侦听器之前执行。有关更多信息,请参阅

但您也对了,创建自己的更新管理器通常是一个更好的主意。这是因为事件侦听器需要实例化一个事件(或其子类),这会极大地影响性能(实例化是Flash运行时中最繁重的任务之一)。这对于ENTER_FRAME事件来说尤其不幸,因为您通常不会使用event对象

创建一个管理器类,应用程序的其他部分可以从中订阅更新回调。每当注册回调时,在调用所有回调的管理器类中添加一个ENTER_FRAME(或TimerEvent.TIMER)事件侦听器。移除最后一个回调后,也移除事件侦听器

在讨论事件和性能的主题时,您可能有兴趣知道,对于冒泡的事件(大多数发生在显示列表中的交互事件),将为冒泡期间事件传递的每个调度程序创建一个新的事件对象!每当不需要事件侦听器时,删除它们总是一个好主意。

您可以对事件侦听器进行优先级排序,从而对它们的执行进行排序。使用addEventListener()的第四个属性,这是一个指示优先级的整数。添加了高优先级整数的事件侦听器将在优先级较低的事件侦听器之前执行。有关更多信息,请参阅

但您也对了,创建自己的更新管理器通常是一个更好的主意。这是因为事件侦听器需要实例化一个事件(或其子类),这会极大地影响性能(实例化是Flash运行时中最繁重的任务之一)。这对于ENTER_FRAME事件来说尤其不幸,因为您通常不会使用event对象

创建一个manager类,应用程序的其他部分可以从中订阅update callb