【问题标题】:Why is Event.RENDER not being dispatched?为什么 Event.RENDER 没有被调度?
【发布时间】:2009-08-19 11:35:38
【问题描述】:

我创建了一个类,它必须注册到 Event.RENDER 事件,以便它知道何时渲染舞台。我的代码的简化版本如下所示:

package
{
   import flash.events.Event;
   import flash.display.Sprite;
   public final class Test extends Sprite
   {
        public final function Test()
        {
            addEventListener(Event.ADDED_TO_STAGE,added,false,0,true);
        }

        private final function added(event:Event):void
        {
            trace("added to stage");
            stage.addEventListener(Event.RENDER, renderHandler,false,0,true);
        }

        private final function renderHandler(event:Event):void
        {
            trace("Event.RENDER dispatched!");
        }
   }
}

正在调度 Event.ADDED_TO_STAGE 事件。但是,Event.RENDER 事件不是。知道我在这里可能做错了什么吗?父级将此对象作为子级添加到舞台,所以这不是问题。

【问题讨论】:

  • 您确定在添加 stage.invalidate() 后会调用它吗?
  • 我根本没有调用 stage.invalidate().. 我应该吗?
  • 是的,一开始有点令人困惑。将其视为 JUST_BEFORE_RENDER。如果您正在寻找一般更新事件,请查看 ENTER_FRAME
  • 我正在寻找 JUST_BEFORE_RENDER 事件。但是,我不明白如何将它与 invalidate 方法一起使用。

标签: actionscript-3 events flex3 rendering stage


【解决方案1】:

您必须调用stage.invalidate() 方法来调度Event.RENDER 事件。根据AS3 referenceEvent.RENDER 在屏幕渲染之前调度,让所有监听对象有机会更新。我使用Event.RENDER 仅在更改参数时才重绘静态形状。这比重绘每一帧要快。

【讨论】:

  • Event.RENDER 不可靠。例如,在调整舞台大小时,它不会像应有的那样频繁触发。如果拖动独立 Flash Player 的窗口角来调整它的大小,在调整舞台大小时不会每帧调用 Event.RENDER,即使每帧都会调度 Event.RESIZE,调整大小处理程序也会调用 stage。无效,更新对象位置,并且玩家在新位置渲染它们......但是许多 Event.RENDER 事件丢失了。这使得 Event.RENDER 不可靠且无用。其他人可以确认这种行为吗?
  • 这条评论本身就是一个很好的问题:“当舞台调整大小时是否调度了 Event.RENDER?”包括你的证据,看看是你的代码有问题还是 AS3 本身有问题。确保将其表述为一个问题,而不是一个陈述。
猜你喜欢
  • 1970-01-01
  • 2019-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-23
相关资源
最近更新 更多