- 締切済み
ムービークリップの制御?
FLASH MX 2004を使用している初心者です。 どうぞ宜しくお願いいたします。 早速質問なのですが、 私の制作したいフラッシュは下記サイトのナビゲーションです。 http://www.nissan.co.jp/ このサイトでは3つのメイン画像(車)が順番に表示され、 右端の「What's New」にカーソルを合わせると、 「What's New」領域の背景が透けて、 その時表示されていた車のムービーがストップし、 尚かつ車種名のテキストまでストップしたままの状態になります。 ここで一つ教えていただきたいのが、 どのようにして「What's New」にカーソルを合わせた時点で、 その時に表示されていた、どの車種のムービーでも止まるように設定できるのでしょうか。 またこのフラッシュは車種名を表すテキストが一番最後の状態でストップします。 このような設定も同時にできるのでしょうか。 非常にわかりづらい質問で恐縮です。 どなた様かご教授いただけませんでしょうか。 どうぞよろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
まあいろんな作り方があると思いますが, フラグをうまく利用しているのではないでしょうか。 あと, ご質問で書かれていない部分が1つあります。 車が移動中に「What's New」にカーソルを合わせると, 車の移動は止まらず, 本来の動きをしてやがて止まるべき定位置で止まります。 そして,テキスト(ロゴ)も車につられて動いています。 まず車だけを考えます。 3つの車をムービークリップに変換し, その3つの車をムービークリップ内もしくは_root上でモーショントゥイーンさせます。 ////////////////////////////////////////////////////////// □レイヤー 筆・・|●--->●///|●--->●///|●--->●///| ////////////////////////////////////////////////////////// ●---> がモーショントゥイーンで動いているとき, ●/// が定位置で止まっているときです。 そして例えば, 「What's New」にカーソルを合わせたとき, 例えば _root のフラグを1にします。 そのことだけを書くとこんな感じです。 -------------------------- on (rollOver) { _root.flag = 1; } on (rollOut) { _root.flag = 0; } -------------------------- 「What's New」に, ロールオーバーしたら, 勝手に作った変数 flag の値を 1 にして, ロールアウトしたら, 勝手に作った変数 flag の値を 0 にする。 という単純なスクリプトですね。 そして,各車の ●/// で止まっている最終フレームにキーフレームを用意して, そのキーフレームに, -------------------------- if (_root.flag == 1) { this.stop(); } -------------------------- と書いておけば, ●/// の最終フレームに来たとき, 「What's New」にロールオーバーしていれば, flag の値が 1 のはずですから,そのフレームで停止します。 そういう単純なことをするのが良いです。 自分でもわかりやすいですし,ムービーの動きも軽くなります。 次に各車ムービークリップの中に, 車種名を表すテキスト(ロゴ)や効果を入れたムービークリップを用意します。 各車ムービークリップ内のタイムライン例 □レイヤー 筆・・|●| ←車種名などのムービークリップ □レイヤー 筆・・|●| ←車の写真 そして, 車種名を表すテキストなどのムービークリップ内に, テキスト(ロゴ)を動かすアニメーションなどを作成します。 □レイヤー 筆・・|○ |●-->●//| 再び,車ムービークリップの編集に戻って, このロゴが動くムービークリップにインスタンス名を付けます。 「logo」というインスタンス名にでもしておきます。 各車内のロゴは統一して「logo」というインスタンス名にしておきます。 そしてメインムービーの編集に戻り, 各車にインスタンス名を付けます。 1つ目の車のインスタンス名は「car1」, 2つ目の車のインスタンス名は「car2」, 3つ目の車のインスタンス名は「car3」 というインスタンス名にでもしておきます。 同じ車であれば,全てのキーフレームのムービークリップに同じ名前を付ける必要がありますから, 本当は,車の写真をムービークリップに変換した時点で「car○」を付けて置く方が良いです。 そして, □レイヤー 筆・・|●--->●///|●--->●///|●--->●///| となっている,メインムービーの, ●---> の最初の ● のあるフレームの任意のレイヤーのキーフレームに, 「car1」が表示されたときでしたら, carNo = 1; 「car2」が表示されたときでしたら, carNo = 2; 「car3」が表示されたときでしたら, carNo = 3; と書いてこれまた適当に決めた carNo という変数に各値を入れておきます。 そして, 「What's New」には次のように書けば, 各車は定位置で止まり, 各車内のロゴも最終フレームで止まります。 -------------------------- on (rollOver) { _root.flag = 1; _root["car" + _root.carNo].logo.gotoAndStop(40); } on (rollOut) { _root.flag = 0; } -------------------------- gotoAndStop(40); の40は今適当に入れてみただけで, 実際は各ロゴの最終フレーム数を入れておきます。 _root["car" + _root.carNo]. の [ ] は配列アクセス演算子と呼ばれる物です。 この場合,配列とはあまり関係がありません。 [ "インスタンス名"] とすると, それが1つの階層として認識されます。 ["car" + _root.carNo]. ですから, もし,_root に ある変数 carNo の値が 2 でしたら, つまり2つ目の車表示中でしたら, ["car" + 2]. という意味になり, つまり, ["car2"]. となるわけです。 つまり全体を通すと _root.car2.logo.gotoAndStop(40); 「2つ目の車のロゴを最終フレームでストップ」 となります。 スクリプトはすんごく簡単でしょう。 なるべく簡単にするのが良いです。 以上は作成例ですが, こんな感じに全体を作って行けば良いのです。 スクリプト自体より,その仕組みを考えるのが少し難しいですね。
お礼
sassakunさま 早速の詳しいご説明ありがとうございます。 昨日はバタバタとしておりご返事がおくれて申し訳ございませんでした。今からご教授いただいた内容を試してみたいと思います。 本当にありがとうございました。 涙が出るほどうれしいです。まじで。