- ベストアンサー
マスクを使いながらムービーの切り替えをしたい
- 背景に配置したムービーのマスクを使って背景を表示し、マウスの移動とクリックに応じてマスクを制御する方法を教えてください。
- また、マウスの再度クリック時には異なるムービーに切り替えたい場合、既にライブラリ内にあるムービーを差し替える方法も教えてください。
- リンケージという概念を使った方法を教えていただけると助かります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
マスクの移動については、フラグを用意し、enterFrame イベントでこのフラグを監視して、移動が許可されている時だけマウスカーソルの座標にマスクのムービークリップの座標を合わせる、という方法もあります。 まあ、startDrag を使っても、結果的には同じだとは思いますが... フラグは、mouseDown イベントか press イベントなどを利用して切り替えます。mouseDown はマウスのボタンが押されさえすれば(マウスカーソルの位置は関係なし)発生しますが、press はムービークリップの上でマウスのボタンが押されなければ発生しません。 背景についてですが。 1フレームに1つずつ背景を配置したムービークリップを作り、クリックされるごとに gotoAndStop で再生するフレームを切り替えるという方法はいかがでしょう。 attachMovie は動的にインスタンスを追加する方法です。追加したものは随時削除できますが、何もしなければ、attachMovie を実行した分だけインスタンスが増えていってしまいますので、今回は不向きだと思います。 例えば、背景画像が5枚あるとします。 この画像を1フレームに1枚ずつ配置した、ムービークリップ back_clip を作ります。つまり、back_clip は5フレームから成るムービークリップになります。 1枚目の背景はフレーム1、2枚目はフレーム2・・・というように対応していますから、あとは、表示したい絵を変数で管理して、 back_clip.gotoAndStop( image_no ); このように変数で指定すると、簡単に背景を切り替えることができます。 マスク用のムービークリップを mask_clip、背景を back_clip として配置し、必要なフラグや変数は _root に用意するものとしますと、スクリプトは、大体、次のようになります。 ・フレーム1に設定するスクリプト //背景の総数と、最初に表示する背景 image_max = 5; image_no = 1; //マスクの移動フラグ:trueの時移動、それ以外はfalse move_flg = true; //背景をマスククリップでマスキング back_clip.setMask( mask_clip ); ・ mask_clip に設定するスクリプト //移動の処理 onClipEvent(enterFrame) { //移動可能な時のみ、マウスカーソルとともに移動する if( _root.move_flg ) { this._x = _root._xmouse; this._y = _root._ymouse; } } //マウスボタンが押された時の処理 onClipEvent(mouseDown) { //移動の可否を切り替える if( _root.move_flg ) { _root.move_flg = false; } else { _root.move_flg = true; //移動可能な時のみ、背景を切り替える //最後まで表示したら最初の絵に戻る _root.image_no++; if( _root.image_no > _root.image_max ) { _root.image_no = 1; } _root.back_clip.gotoAndStop( _root.image_no ); } } ・ back_clip に設定するスクリプト //最初の背景を表示 onClipEvent(load) { this.gotoAndStop( _root.image_no ); } ムービークリップの _x や _y は、ムービークリップの中心点(+印)の座標です。マスクの移動時に、マウスカーソルが中心に固定されるようにしたい場合は、マスクの中心点が中央になるように、マスクのシンボルを編集してください。 なお、ここでは画像を例に説明しましたが、画像の代わりにムービークリップを使っても、考え方は同じです。 切り替える背景は image_no という変数で管理しています。単純にカウントアップするだけでなく、乱数でランダムに選ぶこともできますし、何らかの事情で再生する順序が変更になった時などは、配列で再生する順序を定義して、その順序通りに切り替えるといったことも可能です。
お礼
DPEさん、 ありがとうございます。 そうですね、難しく考える必要は無く、ムービークリップのフレームで解決出来るんですね。 this._x = _root._xmouse; this._y = _root._ymouse; この部分の「_root._xmouse」の座標を強制的に変更する事は可能でしょうか?。 ムービークリップって大変有効な手段ですね。 以前教えて頂いたシーンを分ける方法も、一部はムービークリップにしました。(サムネイル表示部分です) ありがとうございました。