有没有办法检查输入的帧是否已经渲染,而不是使用
中的定时器 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;
}
先谢谢。
答案 0 :(得分:1)
要解决您的问题,请执行以下操作:
private function frameEnterEventHandler(e:Event):void
{
if (myMovieClip) myMovieClip.visible = false;
}
您的ENTER_FRAME处理程序仍将在每个帧上调用,但只有在实际存在时剪辑才会设置为不可见。当然,您可以使用相同的技巧进行计时器或延迟方法调用。
但是,您应该a)不使用ENTER_FRAME来实现这种功能,或者b)在MovieClip设置为不可见后立即删除事件处理程序,因为否则您的方法将在每个帧上反复调用,即使它早就实现了它的目的。
答案 1 :(得分:0)
查看未记录的方法addFrameScript
:
http://www.ryac.ca/blog/2008/05/the-undocumented-addframescript-method/
答案 2 :(得分:0)
这是基于Flash播放器的版本。在Flash 9中,框架将在输入框架之前渲染。在Flash 10+中,帧渲染后。
查看此博客文章,了解有关技术的信息,这些技术可让您确定对象已经到达舞台而无需输入框架事件监听器:http://www.developria.com/2010/04/combining-the-timeline-with-oo.html