1

我在第 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”但它指向错误->

MovieClip(root).scoreTxt.text

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

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

这是我转到“主要”框架时的完整错误消息

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帧上工作正常..但在“主”帧上。它不是..

4

2 回答 2

0

尝试使用(root as MovieClip)而不是MovieClip(root)

于 2013-10-15T05:28:16.513 回答
0

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

为了解决这个问题,我会在类的构造函数中添加一个参数。然后,我会向它发送一个您可以访问的影片剪辑。例如,如果您正在从影片剪辑中实例化您的类,只需向它发送该影片的“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);

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

于 2015-07-27T02:59:37.260 回答