状況が良くわからない部分もありますが
A_mc,B_mc,C_mc はさらに1つのムービークリップに変換し
その親MC(仮称:ABC_mc)を上下に動かして
なおかつその ABC_mc の中で
A_mc,B_mc,C_mc の 表示/非表示 を切り替えれば良いのではないかと思います。
◎ ムービーの構造
メインタイムライン(例)
└ABC_mc
├A_mc
│ ├B(ボタン)
│ └C( 〃 )
├B_mc
│ ├A(ボタン)
│ └C( 〃 )
└C_mc
├A(ボタン)
└B( 〃 )
ABC_mc 内はフレーム1のみで
ABC_mc の基準点はムービークリップの中央であるものとし
A_mc,B_mc,C_mc は
ABC_mc 内の同じ座標に重ねて配置するものとします。
そのようにした場合の
A_mc,B_mc,C_mc が存在するタイムラインのフレームに書くスクリプト例です。
//===========================
//スピードの設定(一応等速)
var spd:Number = 2;
//動く正負の初期値を設定
var pm:int = -1;
//「ABC_mc」内の「B_mc」と「C_mc」を非表示にする
ABC_mc.B_mc.visible = false;
ABC_mc.C_mc.visible = false;
//ABC_mcに毎フレーム実行するイベントリスナーを登録
ABC_mc.addEventListener(Event.ENTER_FRAME,moveABC);
//関数 moveABC の定義
function moveABC(e:Event):void {
//「ABC_mc」(イベントリスナー登録ターゲット)を移動
e.target.y += pm * spd;
//「ABC_mc」がステージの上に消えたら
if (e.target.y < - e.target.height/2) {
//「ABC_mc」をステージの下に移動
e.target.y=stage.stageHeight+e.target.height/2;
//「ABC_mc.B_mc」を非表示
e.target.B_mc.visible=false;
//「ABC_mc.A_mc」を表示
e.target.A_mc.visible=true;
//「ABC_mc」がステージの下に消えたら
} else if (e.target.y > stage.stageHeight+e.target.height/2) {
//動く正負の値を -1 にする
pm=-1;
//「ABC_mc.C_mc」を非表示
e.target.C_mc.visible=false;
//「ABC_mc」内の「A_mc」を表示
e.target.A_mc.visible=true;
}
}
//関数 A_Click の定義
function A_Click(e:MouseEvent):void {
//動く正負の値を -1 にする
pm=-1;
//「ABC_mc」内「A_mc」を表示する
ABC_mc.A_mc.visible=true;
//クリックした親MCを非表示にする
e.currentTarget.parent.visible=false;
}
//関数 B_Click の定義
function B_Click(e:MouseEvent):void {
//動く正負の値を -1 にする
pm=-1;
//「ABC_mc」内「B_mc」を表示する
ABC_mc.B_mc.visible=true;
//クリックした親MCを非表示にする
e.currentTarget.parent.visible=false;
}
//関数 C_Click の定義
function C_Click(e:MouseEvent):void {
//動く正負の値を +1 にする
pm=1;
//「ABC_mc」内「C_mc」を表示する
ABC_mc.C_mc.visible=true;
//クリックした親MCを非表示にする
e.currentTarget.parent.visible=false;
}
//「ABC_mc.A_mc」内のボタン「B」クリック時に関数 B_Click を実行
ABC_mc.A_mc.B.addEventListener(MouseEvent.CLICK,B_Click);
//「ABC_mc.A_mc」内のボタン「C」クリック時に関数 C_Click を実行
ABC_mc.A_mc.C.addEventListener(MouseEvent.CLICK,C_Click);
//「ABC_mc.B_mc」内のボタン「A」クリック時に関数 A_Click を実行
ABC_mc.B_mc.A.addEventListener(MouseEvent.CLICK,A_Click);
//「ABC_mc.B_mc」内のボタン「C」クリック時に関数 C_Click を実行
ABC_mc.B_mc.C.addEventListener(MouseEvent.CLICK,C_Click);
//「ABC_mc.C_mc」内のボタン「A」クリック時に関数 A_Click を実行
ABC_mc.C_mc.A.addEventListener(MouseEvent.CLICK,A_Click);
//「ABC_mc.C_mc」内のボタン「B」クリック時に関数 B_Click を実行
ABC_mc.C_mc.B.addEventListener(MouseEvent.CLICK,B_Click);
//===========================
> 出来れば、動きだしと、
> 動き終わりのスピードなども変えたいと思っています。
ということですが
具体的にどのように動かしたいのかわかりませんし
この辺は全く別件として切り放して考えるべきだと思います。
場合によっては(あくまでもの一例)
親の「ABC_mc」を下から上の一方向にだけ
イージング付きのモーショントゥイーン(クラシックトゥイーン)で動かして
その「再生」/「逆再生」を切り替える方法もあると思います。
「逆再生鉢植え(ActionScript 3.0 バージョン)」
http://suzupara.iinaa.net/mixi/potted_plant_as3/
とにかく
上の A_mc,B_mc,C_mc とは全く切り放して
例えばステージ上に●のムービークリップでも用意し
その●をクリックする度に●の動く向きが逆向きになるだけのようなものをとりあえず作って
それを進化させて行くような作業が必要でしょう。
「ABC_mc(ActionScript 3.0)」
お礼
ご回答ありがとうございます。 ここでつまづいて、少しFlashの制作からはなれていました。 頭を整理したところで、とても分かりやすいご回答を頂いて、これから試してみたいと思います。 イージング付きのモーショントゥイーンははじめのものが出来た後に 簡単なものから進化させようと思います。 ホントに分かりやすいご回答ありがとうございました。 また、この件で疑問があった場合は、また宜しくお願いします。