- ベストアンサー
FLASHのボタンによるフレーム切り替えについて
FLASHには、ボタンをクリックすると他のフレームに移る機能があります。(goAndPlay()など) ここで質問です。 http://t.pic.to/xhtrpのように、ボタンをクリックしたら、そのクリック先のフレームが左(あるいは右)から表れて移動するようにしたいのです。 ご伝授ください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
書かれていらっしゃる内容が全く Flash らしくありませんし, Flash ではなく日常生活であっても何のことか理解しにくいです。 つまり, ほとんど何を書かれていらっしゃるのかわからない状態です。 わかったのは アニメーションGIF の動きだけです。 また goAndPlay() は オーサリング Flash 5 ~ Flash CS4 のバージョン ならびに ActionScript1.0~3.0 の全てのバージョンで使えますから, それだけではお持ちのFlashのバージョンもご使用のActionScriptも特定できません。 バージョンがわからないと, 無回答になるか,トンチンカンな回答しか返ってこない場合がありますよ。 以下では, Flash 5 は古すぎるので勝手に無視させてもらって, Flash MX 以上(Flash 6 以上),ActionScript1.0 でできる方法を書きます。 フレーム1~3 ではなく, ステージ上に 画像1~3,または ムービークリップ1~3 を横並びで配置し, その3つの画像またはムービークリップをまとめて1つのムービークリップに変換します。 変換するときの基準点は「左上」に設定しておくと計算が楽になる気がします。 そして, その3つの画像またはムービークリップ入りのムービークリップにインスタンス名を付けます。 ここでは 「my_mc」 というインスタンス名を付けることにしておきます。 その「my_mc」 内のタイムラインの編集に入って, 各画像もしくはムービークリップの上に, それぞれ ボタン1~3 を配置します。 そして,それらの9つボタンに, 「btn_1_1」,「btn_1_2」,「btn_1_3」,「btn_2_1」,「btn_2_2」,「btn_2_3」,「btn_3_1」,「btn_3_2」,「btn_3_3」 というインスタンス名を付けます (↓図を参照のこと↓)。 メインのタイムライン(_root)の編集に戻って, 「my_mc」 を配置したレイヤーとは違う別のレイヤーを作成し, そのレイヤーのフレームに次のように書けば良いと思います。 ------------------------------------------ // 座標を指定する変数を用意(数値は変える) var zahyou1 = -130; var zahyou2 = -260; var zahyou3 = 0; // 初期の目標座表を決める var zahyou = zahyou1; // my_mc の初期座標をその座標に移動 my_mc._x = zahyou; // 1フレーム進む時間毎に随時実行する関数を定義 my_mc.onEnterFrame = function() { // my_mc の座標を目標座標に1/4ずつ近づける this._x += (zahyou-this._x)/4; }; // btn_1_1 クリック時の動作を定義 my_mc.btn_1_1.onRelease = function() { // 目標座標 zahyou に zahyou1 の値を代入 zahyou = zahyou1; }; // btn_1_2 クリック時の動作を定義 my_mc.btn_1_2.onRelease = function() { // 目標座標 zahyou に zahyou2 の値を代入 zahyou = zahyou2; }; // btn_2_2 クリック時の動作を定義 my_mc.btn_2_2.onRelease = function() { // 目標座標 zahyou に zahyou2 の値を代入 zahyou = zahyou2; }; // btn_2_3 クリック時の動作を定義 my_mc.btn_2_3.onRelease = function() { // 目標座標 zahyou に zahyou3 の値を代入 zahyou = zahyou3; }; // btn_3_1 クリック時の動作を定義 my_mc.btn_3_1.onRelease = function() { // 目標座標 zahyou に zahyou1 の値を代入 zahyou = zahyou1; }; // btn_3_3 クリック時の動作を定義 my_mc.btn_3_3.onRelease = function() { // 目標座標 zahyou に zahyou3 の値を代入 zahyou = zahyou3; }; ------------------------------------------ 要はフレーム移動(それも単フレーム移動)で 表示させる物を横にずらすという妙なことをするのではなく, ムービークリップを横向きに動かせば良いだけではないのでしょうかということです。 「ものを横にずらしたければものを置く場所を変える」 Flash に限らず,日常生活でもそれが普通だと思います。 === もしくは上に書いた方法ではなくて, 3つの画像またはムービークリップ入りのムービークリップを, モーショントゥイーンで横向に動かしても良いと思います。 どちらにしても動かすのはムービークリップです。 「フレームを横向きに動かす」 などという考え方自体が意味不明ですね。 フレーム とは 時間 (時間軸) ですよ。 「午後3時を右に動かす」 とか 「明日を左にずらす」 とか そういう妙なことは考えたことがありませんし, また,それがどういうことなのか見当もつきません。 (SF小説や映画にすら出てこない世界のような気がします。面白そうなので,もしあったら是非見てみたいです。) ※Flash CS3 および CS4 をお持ちで 上のスクリプトを使う場合は, パブリッシュ設定で ActionScript のバージョンを ActionScript1.0 または 2.0 にする必要があります。 また Flash Player の対応バージョンは Flash Player6 以上にする必要があります。 (Flash Lite 1.0 や 1.1 では動作しません。) ※スクリプトは Flash MX 以上で使用可能ですが, 下の画像は Flash CS4 のものです。 見かけが違う可能性が大きいですが, その点はあまり気にしなくて良いと思います。
その他の回答 (1)
- tkmkok
- ベストアンサー率66% (2/3)
つまりx軸にスライド移動させたい訳ですよね。 Tweenクラスなど便利です。 import mx.transitions.Tween; import mx.transitions.easing.*; var myTween:Tween = new Tween(myClip, "_x", Strong.easeOut, 0, 100, 1, true); これで"myClip"というMCがx座標の0から100まで1秒掛けてアニメーションします。
お礼
詳しく説明して下さってありがたいです!
お礼
詳しく説明して貰って有り難いです。 フレームが時間軸という概念がありませんでした。 説明を見て、試してみます。 ありがとうございました。 ちなみにgotoAndPlayの間違いでした。