- ベストアンサー
duplicatemovieclipの使い方と座標設定について
- duplicatemovieclipで要素を複製する方法について説明します。新しいインスタンス名と深度を変えて複数の要素を作成することができますが、表示されない場合があります。
- また、ランダムな座標に要素を配置する方法についても説明します。ステージ上でクリックした場所に要素が複製されるようにすることが可能です。
- しかし、正しく動作しない場合や意図した通りに要素が増えない場合は、スクリプトやインスタンス名の設定を見直す必要があります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
書かれているスクリプトからだけでは, どのように 新しいインスタンス名と深度 を変えていらっしゃるのかわかりませんし, _root["maru"+_root.dep] の dep はどのようにして出されているのかわかりません。 したがいまして, スクリプトの訂正をしたり進化をさせながら, 「ステージ上でクリックした場所に複製されるようにする」 という目標にたどりつくための説明ができませんので, いきなり 「ステージ上でクリックした場所に複製されるようにする」 方法について回答します。 方法はたくさんあると言えばたくさんあるのですが, Flash MX 以上(Flash MX,Flash MX 2004,Flash 8)では, Mouse クラス(Mouse オブジェクト)の onMouseUp か Mouse.onMouseDown イベントリスナーを使う方法が良いと思います。 ActionScript 2.0 リファレンスガイド (ヘルプ) onMouseUp (Mouse.onMouseUp イベントリスナー) http://livedocs.macromedia.com/flash/8_jp/main/00002430.html onMouseDown (Mouse.onMouseDown イベントリスナー) http://livedocs.macromedia.com/flash/8_jp/main/00002432.html 今現在, とのようなものを作られているか,こちらとしてはわかりませんので, 今あるファイルを触るのではなく, Flash を起動させ,新規ドキュメント作成から始めて, ステージ上に「maru」というインスタンス名の, 適当なムービークリップを作成した所から実際に作ってみられるとありがたいです。 次のスクリプトは, インスタンス名 maru のムービークリップが存在するフレーム(フレーム1)に, フレームのスクリプトとして書くコード例です(コピペ可能)。 /////////////////////////////////////////////////////// // 変数 dep の初期化 var dep = 0; // // マウスを監視するインスタンスの作成 myMouseListener = new Object(); // // マウスアップ時の動作を定義 myMouseListener.onMouseUp = function() { // _root の 変数 dep に 1 を加算 _root.dep++; // maru をインスタンス名 "maru"+dep として 深度 dep に複製 _root.maru.duplicateMovieClip("maru"+_root.dep, _root.dep); // "maru"+dep の座標を マウスの座標に移す _root["maru"+_root.dep]._x = _root._xmouse; _root["maru"+_root.dep]._y = _root._ymouse; }; // // Mouseクラスのリスナーにインスタンスを登録 Mouse.addListener(myMouseListener); /////////////////////////////////////////////////////// これで, クリックした座標に maru が複製されます。 座標を点レベルで言うと, クリックした座標に maru の基準点が来るように複製されます。 もし,基準点に関してわからない場合は次のURLを参考にしてみてください。 「インスタンスの基準点」 http://homepage3.nifty.com/ginga-b/MX/inst_refpoint.html 上のスクリプトは Flash MX 以上をお持ちで, なおかつ, Flash Player 6 以上にパブリッシュした場合について使用可能です。 =/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/= もし, お持ちの Flash のバージョンが Flash 5 でしたら, Mouse クラスのメソッドは使えませんので, MovieClip オブジェクトの onClipEvent(mouseUp) や onClipEvent(mouseDown) イベントハンドラ を利用する方法が良いと思います。 Flash 5 の場合は, ムービークリップ maru とは別の目立たない小さなムービークリップを, maru の存在するフレームに作成します。 場所は,ステージ外ワークスペース など見えない場所に作った方が良いと思います。 そして, その見えない場所のムービークリップ自体に次のように書きます(コピペ可能)。 /////////////////////////////////////////////////////// // このムービークリップが表示されたとき onClipEvent (load) { // _root の 変数 dep を初期化 _root.dep = 0; } // // マウスアップ時の動作 onClipEvent (mouseUp) { // _root の 変数 dep に 1 を加算 _root.dep++; // maru をインスタンス名 "maru"+dep で 深度 dep に複製 _root.maru.duplicateMovieClip("maru"+_root.dep, _root.dep); // "maru"+dep の座標を マウス の座標に移す _root["maru"+_root.dep]._x = _root._xmouse; _root["maru"+_root.dep]._y = _root._ymouse; } /////////////////////////////////////////////////////// Flash MX 以上も Flash 5 も基本的に同じ内容です。 マウスを監視するインスタンスをスクリプトで生成するか(MX以上), ムービークリップに監視させるか(Flash5)が違うだけです。 とにかく, ステージ上の任意の位置でのマウスアップもしくはマウスダウンをトリガ(引き金)として, ムービークリップの複製&移動というイベントを発生させれば良いわけです。 また, 書かれているスクリプトから考えて, どう見ても,お持ちのバージョンが Flash 4 以下ではないと推測されますが, 勝手に Flash 4 での方法も簡単に書いておきますと, Flash 4 では onClipEvent (mouseUp) など, onClipEvent() が使えないので, ステージ全体に透明な塗の大きなボタンを用意して, その大きなボタンの On (Release) で maru を複製&移動させれば良ですね。 Flash 3 以下では duplicateMovieClip も, また変数というもの自体も存在しないので無理です。 Flash 3 を使用されている場合は,あきらめてください。 また当然のごとく, マウスを使えない携帯の Flash Lite用 SWF を作成しようとされているのでもないと考えられます。 したがいまして, Flash 5 以上についてのみ,具体的なスクリプトを回答させていただきました。
お礼
説明不足にもかかわらずこんなにも親切にお答えいただき、ありがとうございます。 Flash MXを使用していましたので教えて頂いた通りに作成してみましたところ、思っていた通りのものが出来ました。 行き詰まっていたのでとても助かりました、本当にどうもありがとうございました。