如何修复错误1120:访问未定义的属性?

时间:2014-08-07 19:56:03

标签: actionscript-3

在坐下来,观看和阅读框架时,我试了一下,不能让我的程序继续下去。

因此,当我编程时,我有3帧。一个用于预加载器,一个用于游戏(没有菜单,只是直接用于游戏),最后一个用于保存笔记和补丁注释等。 我在框架中编码。我没有任何额外的.as文件或什么也没有,这一切都有效。

然后我尝试转换为拥有GameControler.as和C.as(用于常量值等),但这不起作用。

所以我重新开始,结束了尝试并以此代码结束:

package {
    import flash.display.*;
    import flash.events.*;
    import flash.geom.*;
    import flash.text.*;
    import flash.utils.*;
    import flash.ui.*;

    import Game.*;

    public class GameController extends MovieClip {


        private var score: Number;

        public function GameController() {
            // constructor code

        }

        public function startGame() {
            score = C.score;
            stage.addEventListener(Event.ENTER_FRAME, update);
        }
        public function scoreF(e: MouseEvent):void {
            score = score + 1;
        }
        hitBtn.addEventListener(MouseEvent.CLICK, scoreF)


        private function update(e: Event) {
            score_n.text = String(score);
        }
    }
}

我最终得到了这两个错误。

Line 30, Column 3   1120: Access of undefined property hitBtn.
Line 30, Column 45  1120: Access of undefined property scoreF.

我不理解什么?

我只想点击按钮,女巫在舞台上,加分,并更新舞台上的分数。

1 个答案:

答案 0 :(得分:0)

即使你的问题得到了解答,这里也是你想要遵循的模式:

package {
  import flash.display.*;
  import flash.events.*;
  import flash.geom.*;
  import flash.text.*;
  import flash.utils.*;
  import flash.ui.*;

  import Game.*;

  public class GameController extends MovieClip {

    private var hitBtn:MovieClip;

    private var score: Number;

    public function GameController() {
        // constructor code
        createChildren();
    }

    protected function createChildren():void {
      // when it was not read from the display list
      // or created in a subclass via inheritence
      if (!hitBtn) {
        hitBtn = getChildByName('hitBtn') as MovieClip;
        if (hitBtn) {
          hitBtn.addEventListener(MouseEvent.CLICK, scoreF);
        } else {
          trace('Child #hitBtn is not found or not a MovieClip.').
        }
      }
    }

    public function startGame() {
      score = C.score;
      if (stage) {
        stage.addEventListener(Event.ENTER_FRAME, update);
      } else {
        trace("Attempt to start the game, although the controller is not added to stage.");
      }
    }

    public function scoreF(e: MouseEvent):void {
      score = score + 1;
    }

    private function update(e: Event) {
      score_n.text = String(score);
    }
  }
}

使用Flash添加子项时,会在创建MovieClip时将其添加到MovieClip中,以便您可以立即访问它们。遵循这种模式可以让您在处理大型项目时更加安全,这有时会发生变化......通过这种方式,您可以非常快速地了解错误。