2010年12月16日木曜日

タイムラインにMCを置いてgotoAndStopでフレームを移動するときの注意

タイムライン上に画像等を配置して、フレームを動かす事によってMCの内容を切り替えるという手法、まだまだよく使います。しかし、フレームに配置されている要素がMCだった場合、少し注意が必要です。

例えばA.asというクラスを持ったMCを1〜3フレームに配置します。
各フレームにはキーフレームを切ってあり、MCの座標は各フレームで違い、各MCには60フレーム程のアニメーションが設定されているとします。

public function A():void{
addEventListener(Event.ADDED_TO_STAGE , init);
addEventListener(Event.REMOVED_FROM_STAGE , init);
trace("construct");
}

private function init(e:Event):void{
if(e.type==Event.ADDED_TO_STAGE){
trace("added");
gotoAndPlay(2);
}else{
trace("removed");
gotoAndStop(1);
}
}


のようにコードを書きます。
すると、下記のような挙動になります。
(マウスクリックで次のフレームに進みます)



各フレームに別のインスタンスを生成したつもりなのに、あたかも一つのインスタンスの座標が変わったかのようにアニメーション状態を引き継いでしまいます。
これを回避するには、各MCに名前を付けると良いようです。
下記は、各MCに名前を付けたものです。
(マウスクリックで次のフレームに進みます)



タイムラインにMCを並べてレイアウト等を管理する時は、少しこの点に注意して作成した方が良いかもしれません。

0 件のコメント:

コメントを投稿