在渲染帧之前执行Event.ENTER_FRAME

时间:2011-12-09 14:36:50

标签: flash actionscript-3

有没有办法检查输入的帧是否已经渲染,而不是使用

中的定时器

Event.ENTER_FRAME函数处理程序?

我不喜欢使用Timer的想法,因为我的代码是在帧

之前执行的

完全装满。

以下是一个例子:

addEventListener(Event.ENTER_FRAME, frameEnterEventHandler);
gotoAndPlay("Frame2");

private function frameEnterEventHandler(e:Event):void
{
    myMovieClip.visible = false;
}

此代码抛出错误“无法访问空对象引用的属性或方法”。 因为第2帧中的Movie Clip对象myMovieClip尚未呈现。

所以我必须做以下

private function frameEnterEventHandler(e:Event):void
{
    setTimeout(blaBla, 100);
}

private function blaBla():void
{ 
    myMovieClip.visible = false;
}

如果可能的话我想做什么

private function frameRenderCompleteEventHandler(e:Event):void
{
  myMovieClip.visible = false;
}

先谢谢。

3 个答案:

答案 0 :(得分:1)

要解决您的问题,请执行以下操作:

private function frameEnterEventHandler(e:Event):void
{
    if (myMovieClip) myMovieClip.visible = false;
}

您的ENTER_FRAME处理程序仍将在每个帧上调用,但只有在实际存在时剪辑才会设置为不可见。当然,您可以使用相同的技巧进行计时器或延迟方法调用。

但是,您应该a)不使用ENTER_FRAME来实现这种功能,或者b)在MovieClip设置为不可见后立即删除事件处理程序,因为否则您的方法将在每个帧上反复调用,即使它早就实现了它的目的。

答案 1 :(得分:0)

答案 2 :(得分:0)

这是基于Flash播放器的版本。在Flash 9中,框架将在输入框架之前渲染。在Flash 10+中,帧渲染后。

查看此博客文章,了解有关技术的信息,这些技术可让您确定对象已经到达舞台而无需输入框架事件监听器:http://www.developria.com/2010/04/combining-the-timeline-with-oo.html