Actionscript 3 调用Event.RENDER的频率是多少?

Actionscript 3 调用Event.RENDER的频率是多少?,actionscript-3,events,Actionscript 3,Events,如果我通过addChild()将一些对象添加到显示列表中,那么Event.RENDER多长时间触发一次?只有在显式使用stage.invalidate()时才会调用它 您应该注意到与Event.RENDER的侦听器相关的某些bug和特殊注意事项(或者至少在FP9中有bug,这是我最后一次积极使用stage.invalidate) 无论有多少不同的对象侦听Event.RENDER事件,如果其中一个调用removeEventListener(Event.RENDER…那么所有的侦听器都将被删除。据我

如果我通过addChild()将一些对象添加到显示列表中,那么Event.RENDER多长时间触发一次?

只有在显式使用stage.invalidate()时才会调用它

您应该注意到与Event.RENDER的侦听器相关的某些bug和特殊注意事项(或者至少在FP9中有bug,这是我最后一次积极使用stage.invalidate)

  • 无论有多少不同的对象侦听Event.RENDER事件,如果其中一个调用removeEventListener(Event.RENDER…那么所有的侦听器都将被删除。据我所知,RENDER是唯一发生此错误的事件(或在FP9中使用)

  • 您不能在Event.RENDER处理程序内部使用stage.invalidate()。因为您只需要调用stage.invalidate来触发渲染处理程序,所以这应该不是问题


  • 编辑:下面评论中的bigp提出了一个有效的观点,即Flex确实可能使用stage.invalidate。将我的答案视为严格适用于vanilla AS3的答案,没有任何附带的框架,如Flex。

    如果使用stage.invalidate()?仅当显式调用stage.invalidate()时才会调用它。如果在ENTER_框架处理程序内调用stage.invalidate,则为是。否则为否。通常不会在ENTER_框架处理程序内调用它。这是一种使“最后一分钟”成为可能的方法在显示列表呈现之前更新显示列表。不幸的是,它在这方面并不总是成功的。如果您的目标是FP10,您可能会更好地利用其他帧事件,例如frame_CONSTRUCTED,或EXIT_frame,以便更好地控制事情发生的精确时间。您到底需要什么。呈现?我认为这是一个部分回答正确。在Flex应用程序中,这可以通过任何外观变化的组件(滚动、过渡、效果、过渡)触发。它可能在内部称为“stage.invalidate()方法,但我认为可能值得注意的是,在引擎盖下,Flex可以在任何可视元素可能改变的地方处理它。@bigp谢谢bigp,你可以告诉我,我很少使用Flex,而是使用plain AS3。