0

AS3に問題があります。ムービークリップを持っていて、それをステージに追加しました addChild(gameLevelSelect);

addChild(gameLevelSelect);問題は、その中に他のMovieClipsもありますが、ステージ上のその中に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);としてムービークリップをステージに追加しました。そのムービークリップにはアニメーションとボタンがあり、リンケージを行う代わりに、addChild(gameLevelSelect);でムービークリップとして保持したいと思います。私が知りたいのは、addChild(gameLevelSelect);のインスタンス名でムービークリップと通信する方法です。私が試してみました

gameLevelSelect(theAddClass).getChildByName( "thumbLevel01")。getChildByName( "stars")。<..starsはthumbLevel01のmovieClipです。次に、addEventListener(MouseEvent.CLICK、load_Level01);

[addChild--gameLevelSelect]。。。。。。。>インスタンス名のmovieClip-thumbLevel01(子を追加しない)。。。。。。。。。>インスタンス名のmovieClip-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 の混合を処理するその他の方法については、Combining the Timeline with OOP in Flash を参照してください。

于 2012-06-30T15:40:22.417 に答える