2012-03-23 124 views
0

我做了一个as3框架来故意重新启动movieclip,但我得到每个我调用的movieclip typerror。TypeError:术语未定义?

TypeError: Error #1010: A term is undefined and has no properties. 

我试过了,没有AS连接,但结果是一样的。

代码:

//Loop animation. 
addEventListener(Event.ENTER_FRAME, function (Reiniciar) { 
    if (MovieClip(root).Animacion.currentFrame==500){ 
     MovieClip(root).Animacion.gotoAndPlay(1); 
     MovieClip(root).Personaje.gotoAndPlay(1); 
     MovieClip(root).Personaje.Guy.gotoAndPlay(1); 
    } 
}); 

enter image description here

enter image description here

回答

1

在这行代码:

if (MovieClip(root).Animacion.currentFrame==500){ 
      MovieClip(root).Animacion.gotoAndPlay(1); 
      MovieClip(root).Personaje.gotoAndPlay(1); 
      MovieClip(root).Personaje.Guy.gotoAndPlay(1); 
     } 

您试图访问一个名为Animacion变量,另一个变量名为Personaje,里面有另一个变量名为Guy。确保您在Flash舞台上的影片剪辑的实例的名称都是这样命名的,图片中显示的是符号属性选项卡中的类和符号名称,而不是实例名称。要设置实例名称,请在舞台上选择您的MovieClip(将出现蓝色轮廓),然后查看属性选项卡

另外,变量名通常是小写字母,骆驼大小写(大写的每个单词的第一个字母)是为了便于阅读而保留给Class名称的。

在这一行:

//Loop animation. 
addEventListener(Event.ENTER_FRAME, function (Reiniciar) { 

要创建并侦听到进入帧事件匿名函数。我想你想给你的函数命名为“Reiniciar”,但括号之间的内容是函数获取的Event参数的名称,而不是函数名称。

为您的代码的首选语法是:

import flash.events.Event; 

//add event handler 
addEventListener(Event.ENTER_FRAME, reiniciar); 

//loop function  
function reiniciar(e:Event):void 
{ 

    if (MovieClip(root).animacion.currentFrame==500) 
    { 
      //animacion is the instance name of the Symbol Animacion 
      //and is placed in your main timeline 
      MovieClip(root).animacion.gotoAndPlay(1); 

      //there is a movieclip instance named personaje in your main timeline 
      MovieClip(root).personaje.gotoAndPlay(1); 
      //personaje has inside a movieclip instance named guy 
      MovieClip(root).personaje.guy.gotoAndPlay(1); 

     } 
} 

这应该工作,但是我劝你尽量不要过度使用ENTER_FRAME监听器,因为它们很昂贵的性能代价。例如,在这个例子中,如果MovieClip“animacion”已经达到500帧,可能你不需要问每一个帧,认为它就像你汽车后座的恼人的孩子大喊“我们在那里吗?我们到了吗?”每隔几秒钟。我建议你应该遵循ActionScript 3上的一些初学者教程来习惯语法,并更熟悉代码背后的逻辑。

相关问题