【问题标题】:Using MovieClip(root) in ActionScript 3在 ActionScript 3 中使用 MovieClip(root)
【发布时间】:2013-10-19 21:39:57
【问题描述】:

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

【问题讨论】:

  • scoreTxt 还是 scoreNa ? scoreNa 正确吗?
  • 我的意思是 scoreNa 先生。对不起..它还没有修复..当我去下一帧时..它似乎找到了 scoreNa.text.. 因为 scoreNa.text 只在第 3 帧。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我的猜测是“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-03-12
      • 2011-09-14
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多