0

我对 AS3 有一些问题。我有一个 Movieclip,我已将它添加到舞台上 addChild(gameLevelSelect);

问题是我里面还有其他的电影剪辑,但不像addChild(gameLevelSelect);舞台上的 addChild 那样。我给了一个符号实例名称stageThumb_01,但它不起作用。我该如何解决?

这是代码:

gameLevelSelect.getChildByName("stageThumb_01").addEventListener(MouseEvent.CLICK, load_Level01);
function load_Level01(e:MouseEvent):void {
    trace("blam")
    gameLevelSelect.getChildByName("stageThumb_01").getChildByName("stars").gotoAndPlay(2);
}

..................................................................

gameTitle.addEventListener(Event.ENTER_FRAME, load_LevelSelection);
function load_LevelSelection(event:Event):void {
    if(MovieClip(gameTitle).currentFrame == 22){
        removeChild(gameTitle);
        addChild(gameLevelSelect);

        addChild(thumbLevel01);

        thumbLevel01.getChildByName("stars").gotoAndPlay(1);

        gameLevelSelect.gotoAndPlay(1);

    }
}

var thumbLevel01 = new stageThumb01();
thumbLevel01.x = 83;
thumbLevel01.y = 161;

thumbLevel01.addEventListener(MouseEvent.CLICK, load_Level01);
function load_Level01(e:MouseEvent):void {
    trace("blam")
    //thumbLevel01.getChildByName("stars").gotoAndPlay(2);
}

这行得通,原因是我将 thumbLevel01 设置为 addChild。但这不是我想要的。我在舞台上添加了一个影片剪辑作为 addChild(gameLevelSelect); 在那个movieclip中有动画和按钮而不是做一个链接我想把它作为一个movieclip保存在addChild(gameLevelSelect);中。我想知道的是如何与 addChild(gameLevelSelect); 中具有实例名称的影片剪辑进行通信。我努力了

gameLevelSelect(theAddClass).getChildByName("thumbLevel01").getChildByName("stars").<..stars 是 thumbLevel01 中的一个movieClip。然后 addEventListener(MouseEvent.CLICK, load_Level01);

[addChild - gameLevelSelect] 。. . . . . . > 带有实例名称的电影剪辑 - thumbLevel01(不添加子项)。. . . . . . . .> 带有实例名称的电影剪辑 - starsMeter(用于得分)。

4

1 回答 1

0

您提出问题的方式非常迟钝,因此我无法深入了解您真正要问的内容,但我怀疑发生的事情是您试图在将孩子添加到之前访问它们您通过代码添加的实例的阶段。

通常,您不想直接访问孩子。相反,您添加的组件应该公开允许您做您需要做的事情的属性和方法,同时还要考虑到如何构建 MC 的具体细节。例如:

class ShowMessage extends MovieClip {
  public var tf:TextField;//this is public so the Flash player can fill it, not for external use
  private var _message:String;
  public function get message():String {
      return _message;
  }
  public function set message(value:String):void {
      _message = value;
      if (tf) {
        tf.text = value;
      } 
  }
}

有关处理时间线和 AS 混合的其他方法,请查看在 Flash 中结合时间线和 OOP

于 2012-06-30T15:40:22.417 回答