- 締切済み
【as3】クリックでインスタンスを増やしたい
Actionscript初心者です。 勉強のため、以下のURLにあるActionscript2.0のFlashをActionscript3.0に書き換えたいと思っています。 http://allabout.co.jp/gm/gc/66814/ 左側にリースのパーツ、右に素のままのリースが配置されています。パーツはそれぞれ、リボン付きベル(インスタンス名「bellBig」)、松ぼっくり (インスタンス名「matu」)、小さいベル(インスタンス名「bellSmall」)と指定してあります。この3つのアイテムをドラッグドロップすることでリースを飾り付けていきます。 インスタンスをドラッグ&ドロップする所まではできたのですが、 松ぼっくりと小さいベルをドラッグした際にインスタンスを複製するところでつまずいています。 あまりにも初歩的な質問で恐縮ですが、ご教授お願いいたします。 /*////////////////////大きいベル/////////////////////*/ // ドラッグ開始 bellBig.addEventListener(MouseEvent.MOUSE_DOWN,mouseDown1); function mouseDown1(event:MouseEvent):void{ bellBig.startDrag(); } // ドラッグ終了 bellBig.addEventListener(MouseEvent.MOUSE_UP,mouseUp1); function mouseUp1(event:MouseEvent):void{ bellBig.stopDrag(); } /*////////////////////まつぼっくり/////////////////////*/ // ドラッグ開始 matu.addEventListener(MouseEvent.MOUSE_DOWN,mouseDown); function mouseDown(event:MouseEvent):void{ matu.startDrag(); } //ドラッグ終了 matu.addEventListener(MouseEvent.MOUSE_UP,mouseUp); function mouseUp(event:MouseEvent):void{ matu.stopDrag(); } /*////////////////////小さいベル/////////////////////*/ // ドラッグ開始 bellSmall.addEventListener(MouseEvent.MOUSE_DOWN,mouseDown2); function mouseDown2(event:MouseEvent):void{ bellSmall.startDrag(); } // ドラッグ終了 bellSmall.addEventListener(MouseEvent.MOUSE_UP,mouseUp2); function mouseUp2(event:MouseEvent):void{ bellSmall.stopDrag(); }
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- BlurFiltan
- ベストアンサー率91% (1611/1754)
なるべく元のサンプルと同じことを なるべく元と同じような方法で なるべく簡単にするなら次のような感じになると思います。 以下の説明ではマツボックリを代表にします。 まず元のサンプル(act46.fla)で パブリッシュ設定 の スクリプト 設定を ActionScript 3.0 にして, root(メインのタイムライン) の フレーム1 に書かれているスクリプト count = 1; これを次のように変更します。 var count:uint = 1; 次に 「ライブラリ」で マツボックリのムービークリップシンボル「matu」 を選択して 右クリックなどから「プロパティ」で「シンボルプロパティ」パネルを表示させ, リンケージ の欄で □ ActionScript 用に書き出し にチェックを入れ, クラス(C):[ ] の欄でクラス名を付けます。 ここでは例えば 「Matu」 というクラス名を付けることにします(【下図】↓)。 そして ライブラリ内のシンボルの「matu」でも良いですし ステージ上のインスタンス「matu」でも良いので, そのムービークリップ内のタイムラインの編集に入ります。 ムービークリップ内のタイムラインは1レイヤーだけなので スクリプトを書くレイヤーでも追加して2レイヤーにし その新レイヤーの フレーム1 に次のようなスクリプトを書きます。 ----------------------------- // ドラッグ開始 this.addEventListener(MouseEvent.MOUSE_DOWN,mouseDown); function mouseDown(event:MouseEvent):void { root["matu" + root.count] = new Matu(); root["matu" + root.count].x = this.x; root["matu" + root.count].y = this.y; root.addChild(root["matu" + root.count]); this.startDrag(); } //ドラッグ終了 this.addEventListener(MouseEvent.MOUSE_UP,mouseUp); function mouseUp(event:MouseEvent):void { this.stopDrag(); root.count++; } ----------------------------- 以上でマツボックリに関しての作業は終わりです。 考え方や使い方によってはスクリプトの書く場所やその内容なども変わると思いまが そういった無数の場合は書けませんし ある程度の場合は書けたとしても問題がややこしくなるので 「なるべく元と同じ」 を尊重したものを回答しました。
補足
たいへん親切で丁寧な説明ありがとうございます。 教えていただいたものを参考に、自分なりにスクリプトを書いてみました。 addChildでインスタンスを増やすところまではできたのですが、 今度は増えたインスタンスをドラッグ&ドロップできるようにできませんでした。 var count:uint = 1; count++ の使い方がわかっていないようです。 度々で申し訳ございませんが、もう一度ご教授お願いいたします。 ----------------------------------- //インスタンスの作成 var newMatu:MovieClip = new Matu(); var count:uint = 1; //プロパティの設定 newMatu.x = 50; newMatu.y = 180; //イベント処理 matu.addEventListener(MouseEvent.MOUSE_DOWN,mouseDown); function mouseDown(evt:MouseEvent):void{ matu.startDrag(); addChild(newMatu); } matu.addEventListener(MouseEvent.MOUSE_UP,mouseUp); function mouseUp(evtt:MouseEvent):void{ matu.stopDrag(); root.count++; } -----------------------------------