addChild与内部movieClip进行通信

时间:2012-06-30 01:54:40

标签: actionscript-3 flash

我在使用AS3时遇到了一些问题。我有一个Movieclip,我已将其添加到addChild(gameLevelSelect);的舞台上。

问题是我还有其他的MovieClip,但不是在舞台上的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。 但这不是我想要的。我有一个movieclip作为addChild(gameLevelSelect)添加到舞台上;在那个movieclip中有动画和按钮 而不是做一个链接我想把它作为addChild(gameLevelSelect);中的movieclip。我想知道的是如何在addChild(gameLevelSelect)中与实例名称的影片剪辑进行通信。我试过了

  

gameLevelSelect(theAddClass).getChildByName( “thumbLevel01”)getChildByName( “分”)< ..分   是thumbLevel01中的movieClip。然后   addEventListener(MouseEvent.CLICK,load_Level01);

[addChild - gameLevelSelect]      。      。      。      。 。 。 。 >带实例名称的movieClip - thumbLevel01(不添加子)。                      。                      。                      。                      。 。 。 。 >带实例名称的movieClip - starsMeter(得分)。

1 个答案:

答案 0 :(得分: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混合的其他方法,请查看Combining the Timeline with OOP in Flash