在ActionScript 3中使用MovieClip(root)

时间:2013-10-11 17:54:23

标签: actionscript-3 flash adobe movieclip flash-cs5.5

我在第3帧..我在舞台名称scoreTxt上有文字字段..在第3帧我添加了TryClass ..

 var Try:TryClass = new TryClass();

TryClass具有updateScore的功能..如果我在第3帧,这工作正常。所以我的代码是

     public function updateScore(amount:int):void
     {
           score += amount;
           if(score < 0) score = 0;

           realNumber = score;

           setInterval(updateDisplayedScore, 10);

     }

     public function updateDisplayedScore():void
           {
               displayedNumber += Math.round((realNumber-displayedNumber)/5);
               if (realNumber - displayedNumber < 5 && realNumber - displayedNumber > -5)
               {
                     displayedNumber = realNumber;
               }
               addZeros();
           }

     public function addZeros():void
           {
               var str:String = displayedNumber.toString();
               MovieClip(root).scoreNa.text = str;
           }

但是,如果例如..用户死亡或他达到了所需的分数..我想使用此代码去某个框架..

MovieClip(this.root).gotoAndStop("Main"); this code is on the class..

它到达框架“Main”但其指向错误 - &gt;

MovieClip(root).scoreTxt.text

“主”框架在第4帧..我还没有添加TryClass ..我应该在我的所有框架中添加TryClass吗?那是怎么回事?

对不起这个问题..我还不知道如何在课堂上完美编码..并访问时间轴和其他外部类..请不要使用更深层次的动作脚本语言..仅限初学者..

当我转到“Main”框架时,这是完整的错误消息

TypeError: Error #1009: Cannot access a property or method of a null object reference.
          atTumba/addZeros()[C:\Documents and Settings\Chrissan\Desktop\Game and Docs\Game\Tumba.as:686]
          atTumba/updateDisplayedScore()[C:\Documents and Settings\Chrissan\Desktop\Game and Docs\Game\Tumba.as:680]
          atFunction/http://adobe.com/AS3/2006/builtin::apply()
          atSetIntervalTimer/onTimer()
          atflash.utils::Timer/_timerDispatch()
          atflash.utils::Timer/tick()

这是Tumba.as的第686行 - MovieClip(root).scoreNa.text = str;

public function updateDisplayedScore():void
               {
                   displayedNumber += Math.round((realNumber-displayedNumber)/5);
                   if (realNumber - displayedNumber < 5 && realNumber - displayedNumber > -5)
                   {
                         displayedNumber = realNumber;
                   }
                   addZeros(); -->> this is the line 680 of Tumba.as
               }

关于setInterval先生..它的工作正常导致我导入flash.utils。* ..在第3帧工作正常,我添加了类..但在“主”框架上。它不是..

2 个答案:

答案 0 :(得分:0)

尝试使用(root as MovieClip)代替MovieClip(root)

答案 1 :(得分:0)

我的猜测是“root”是未定义的,因为我猜测TryClass不是从MovieClip或其他存在于现有层次结构中的DisplayObject继承的。

要修复它,我会在类的构造函数中添加一个参数。然后,我会发送一个你可以访问的movieclip。例如,如果您要从影片剪辑中实例化您的类,只需将该影片的“this”发送给它。

public class TryClass {
   ...
   static var myroot:MovieClip = null;
   ...
   public function TryClass(someclip:MovieClip=null) {
      ...
      if (this.myroot == null && someclip != null && someclip.root != undefined) {
        this.myroot = someclip.root;
      }
      ...
   }
   ...
}

然后从影片剪辑中:

var something = new TryClass(this);

无论如何,这是我正在为我正在制作的课程使用的技巧。对于我的,如果类检测到根目录尚未加载,我会添加一个外部影片剪辑的实例。在我的例子中,从我的加载包装类调用的通用加载栏。如果我把它放入的特定电影已经有一个自定义加载栏,那么它将不会做任何事情,但对于任何我还没有的电影,它会添加它。