Actionscript 3 AS3:使用EventListeners或ArrayLops更快?

Actionscript 3 AS3:使用EventListeners或ArrayLops更快?,actionscript-3,performance,scalability,addeventlistener,Actionscript 3,Performance,Scalability,Addeventlistener,我正在用AS3编写一个游戏,例如,屏幕上有大约40个对象。假设它们是云。我想知道这两条路径中哪一条对系统资源的压力更小: a) 在每个对象上放置一个eventListener并使其自身更新,或者 b) 循环遍历数组并手动更新每个对象 还是性能差异可以忽略?这两种解决方案的可扩展性是否都比其他解决方案好?我认为无论哪种方法,性能都是可以忽略不计的。一旦你得到了很多对象,你可能会看到不同(循环是赢家)。根据我的经验,Adobe在优化actionscript事件侦听器路径方面做了大量工作。我认为无论哪

我正在用AS3编写一个游戏,例如,屏幕上有大约40个对象。假设它们是云。我想知道这两条路径中哪一条对系统资源的压力更小:

a) 在每个对象上放置一个eventListener并使其自身更新,或者

b) 循环遍历数组并手动更新每个对象


还是性能差异可以忽略?这两种解决方案的可扩展性是否都比其他解决方案好?

我认为无论哪种方法,性能都是可以忽略不计的。一旦你得到了很多对象,你可能会看到不同(循环是赢家)。根据我的经验,Adobe在优化actionscript事件侦听器路径方面做了大量工作。

我认为无论哪种方式,性能都是可以忽略不计的。一旦你得到了很多对象,你可能会看到不同(循环是赢家)。根据我的经验,Adobe在优化actionscript事件侦听器路径方面做了大量工作。

我的印象是,事件侦听器需要更多的资源,因此在需要性能时最好使用数组。因此,它的规模也会更好。如果您使用的是Flash 10,那么请使用向量,我相信它提供的性能比数组更好(并键入saftey)。

我的印象是事件侦听器需要更多资源,因此在需要性能时使用数组更好。因此,它的规模也会更好。如果您使用的是Flash 10,那么就使用Vector,我相信它的性能比数组(并键入saftey)要好。

使用EventListeners只需确保正确管理它们即可。完成后,请删除它们,并使用弱引用

你不会真的从这样的事情中发现太多的表现。通常,更好的性能来自于较大的标记项,比如不使用过滤器、降低帧速率等。因此,在我的书中,为了半毫秒而惩罚代码清晰度和OO是不值得的

有一些非常好的指南可以教你如何在AS3中进行优化。我找到的最好的是。我刚找到一个新的。我绝对建议每个参加AS3的人都应该阅读格兰特·斯金纳的幻灯片


当然,不要只相信我的话(或任何回答你问题的人),你可以自己做测试,并使用剖析器查看结果。请参阅Lee Brimlow的最新视频教程了解如何做到这一点。这表值!在这里查看:。

使用事件监听器只需确保正确管理它们即可。完成后,请删除它们,并使用弱引用

你不会真的从这样的事情中发现太多的表现。通常,更好的性能来自于较大的标记项,比如不使用过滤器、降低帧速率等。因此,在我的书中,为了半毫秒而惩罚代码清晰度和OO是不值得的

有一些非常好的指南可以教你如何在AS3中进行优化。我找到的最好的是。我刚找到一个新的。我绝对建议每个参加AS3的人都应该阅读格兰特·斯金纳的幻灯片


当然,不要只相信我的话(或任何回答你问题的人),你可以自己做测试,并使用剖析器查看结果。请参阅Lee Brimlow的最新视频教程了解如何做到这一点。这表值!请在这里查看:。

这是一个棘手的问题,纯粹主义者会说使用数组循环方法,因为使用这种方法可以从MVC中删除“视图”,并且仍然可以让系统工作(这是对任何系统的一个很好的测试)。但是,如果您使用的是事件,则可以通过事件冒泡和严格键入来节省一些时间。 例如,如果我们假设您创建了一个名为
CloudEvent
的自定义事件,该事件具有一个名为
cloud
的属性,该属性包含对分派
CloudSprite
的引用,那么只要默认情况下事件冒泡,就不需要为每个事件添加事件侦听器,只需转到存放它们的
DisplayObjectContainer
(我很有想象力地称之为
CloudContainer
)。这样,事件就会出现气泡,您只需添加一个侦听器,而不必担心管理子项上的侦听器

public function CloudContainer()
{
    super();
    addEventListener(CloudEvent.CHANGE, cloudChangeHandler);
}

private function cloudChangeHandler(evt:CloudEvent):void
{
    var cloud:CloudSprite = evt.cloud;
    cloud.update();
}

希望这会有所帮助这是一个棘手的问题,纯粹主义者会说使用数组循环方法,因为使用这种方法可以从MVC中删除“视图”,并且仍然可以让系统工作(这是对任何系统的良好测试)。但是,如果您使用的是事件,则可以通过事件冒泡和严格键入来节省一些时间。 例如,如果我们假设您创建了一个名为
CloudEvent
的自定义事件,该事件具有一个名为
cloud
的属性,该属性包含对分派
CloudSprite
的引用,那么只要默认情况下事件冒泡,就不需要为每个事件添加事件侦听器,只需转到存放它们的
DisplayObjectContainer
(我很有想象力地称之为
CloudContainer
)。这样,事件就会出现气泡,您只需添加一个侦听器,而不必担心管理子项上的侦听器

public function CloudContainer()
{
    super();
    addEventListener(CloudEvent.CHANGE, cloudChangeHandler);
}

private function cloudChangeHandler(evt:CloudEvent):void
{
    var cloud:CloudSprite = evt.cloud;
    cloud.update();
}

希望这有帮助

键入“安全”或“限制”?唯一的限制是当您需要创建泛型数据结构时,这只是因为AS3不支持泛型:(键入“安全”或“限制”?唯一的限制是当您需要创建泛型数据结构时,这只是因为AS3不支持泛型:(我不会说不使用事件监听器会牺牲清晰度和OO。我编程游戏的方式与普通交互项目有很大不同。我倾向于有一个游戏循环,因为我会更新世界,它会循环实体并更新它们(可能会使用四叉树进行优化)1.这似乎是事实