- ベストアンサー
複数生成したムービーの中のムービーはドラッグ移動できないようにしたい
- ドラッグ移動できないようにしたいムービーがあります。ActionScript3.0の環境でchipというシンボルからdotMC+連番というインスタンスを複数生成し、その中にeditMC+連番というインスタンスを生成しました。しかし、dotMC+連番はドラッグできるのに対して、editMC+連番もドラッグすると単体で移動してしまいます。event.targetにしているため、editMC+連番が動いてしまうのですが、ドラッグさせないようにする方法はありませんか?
- ActionScript3.0の環境で、dotMC+連番とeditMC+連番というインスタンスを生成しました。しかし、dotMC+連番はドラッグ移動できるのに対して、editMC+連番もドラッグすると単体で移動してしまいます。event.targetにすることでeditMC+連番が動いてしまうのですが、editMC+連番をドラッグさせないようにする方法はありませんか?
- ActionScript3.0の環境で、複数生成したムービーの中の一部のムービーをドラッグ移動できないようにしたいです。chipというシンボルからdotMC+連番というインスタンスを複数生成し、その中にeditMC+連番というインスタンスを生成しています。しかし、dotMC+連番はドラッグできるのに対して、editMC+連番もドラッグすると単体で移動してしまいます。event.targetにすることでeditMC+連番が動いてしまうのですが、editMC+連番をドラッグさせないようにする方法はありませんか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 > そしてインスタンスを変数に格納して制御することですが > editMC.name="editMC"+j; > でeditMC+連番という変数に入れたら > ドラッグの際は、event.currentTargetでなく > DisplayObjectContainer.getChildByName()を > 使えということでしょうか 違いますよ。 > editMC.name="editMC"+j; を使うな ということです。 nameプロパティに何かを代入してもしなくても 今現在の状況では何も変わらないと思います。 // 削除↓ // dotMC.name="dotMC"+j; // 削除↓ // editMC.name="editMC"+j; という意味です。 これらがあっても getChildByName() を使っていないのですからそもそも無意味でしょう。 また getChildByName() を使うような事態にも普通はなりませんと言う意味です。 name プロパティ を使わずにするとは 例えばこんな感じです。 ----------------------------- for (var j=0; j<10; j++) { this["dotMC" + j] = new chip(); addChild(this["dotMC" + j]); this["dotMC" + j].addEventListener(MouseEvent.MOUSE_DOWN, chipMCmove); this["dotMC" + j].addEventListener(MouseEvent.MOUSE_UP, chipMCStop); this["editMC" + j] = new edit(); this["dotMC" + j].addChild(this["editMC" + j]); } //▼▼▼▼▼▼▼ドラッグ可能にする function chipMCmove(event:MouseEvent):void { event.currentTarget.startDrag(); } function chipMCStop(event:MouseEvent):void { event.currentTarget.stopDrag(); } //試し↓ this.dotMC3.x = 50; this.dotMC3.y = 30; this.editMC3.x = 10; this.editMC3.y = 10; -----------------------------
その他の回答 (2)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
#1&#2 です。 #2の補足で書かれていらっしゃる内容全般に関しては 「配列アクセス演算子」 と Google などで検索してみてください。 「配列アクセス演算子」 は ActionScript 1.0 ~3.0 まで共通です。 http://www.google.co.jp/search?hl=ja&source=hp&q=%E9%85%8D%E5%88%97%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E6%BC%94%E7%AE%97%E5%AD%90 > この場合のthis.とはどういう意味でしょうか? ActionScript 3.0 の場合で フレームにスクリプトを書く場合は ごく単純で 「this」=「そのスクリプトを書いたタイムライン」 です。 メインのタイムラインでしたら 「root [ MovieClip(root) ]」 です。
お礼
そのスクリプトを書いたタイムラインということは まだ難しいですが色々資料を見て 自分なりに理解していけると思います。 お手数掛けましたと同時に勉強になりました。 ありがとうございました。
- BlurFiltan
- ベストアンサー率91% (1611/1754)
まず 「おや?」 と思う箇所ですが, > chipMC.addChild(editMC); と書かれていらっしゃる行の 「chipMC」 が何のことやらわかりません。 これは dotMC.addChild(editMC); の書き間違いでしょうか? ===================== もし chipMC が dotMC の書き間違いであるなら, 2つの function 内の event.target の部分を event.currentTarget に書き替えれば良いと思います↓。 --------------------------------- //▼▼▼▼▼▼▼ドラッグ可能にする function chipMCmove(event:MouseEvent):void { event.currentTarget.startDrag(); } function chipMCStop(event:MouseEvent):void { event.currentTarget.stopDrag(); } --------------------------------- これでご質問の点はクリアされると思います。 ===================== しかし... ですね。 その前が何とも「なっとらん!」状態だと思います。 ActionScript 3.0 では インスタンス名(nameプロパティ) など, よっぽどそれをつかわなければならない事態に遭遇したときにしか使うものではありませんよ。 ※私はそんな事態に遭遇したことはない。 次のページを参考にしてみてください。 「F-site [AS3] MovieClipインスタンスとインスタンス名」 http://f-site.org/articles/2008/04/19014939.html ↑すべてが重要ですが 中でも次の3箇所を引用させていただきます。 > インスタンスを参照する必要があるときには、 > つぎのフレームアクションのように > DisplayObjectContainer.getChildByName()メソッドにより > 文字列から参照を取得します。 > インスタンスを変数に格納して制御する方がよさそうです。 > インスタンス名は、他のインスタンスと区別して特定するための > プロパティだと思われます。 > 変数によりインスタンスを参照するというのが、 > ActionScript 3.0の基本だといえます。
補足
早速のお答えありがとうございました。 chipMC が dotMC の書き間違いでしたがevent.currentTargetで 思い通りになりました。ありがとうございます。 そしてインスタンスを変数に格納して制御することですが editMC.name="editMC"+j; でeditMC+連番という変数に入れたら ドラッグの際は、event.currentTargetでなく DisplayObjectContainer.getChildByName()を 使えということでしょうか? 宜しくお願いします。
補足
よく分かりました。目から鱗です。 dotMC.name="dotMC"+j;で作ってもfor文の外で dotMC3などの名前で代入や操作できるわけでもないのですね。 確かめたら確かにエラーがでました。 for文内では、this["dotMC" + j]で作成し 外からはthis.dotMC3.x = 50;で操作するということですね。 最後にひとつ教えて欲しいですが、操作する際にこのthis.を取って dotMC3.x = 50;とするとエラーが出ます。 こういう複製方法だとfor文の外では常にthis.が必要なのでしょうが この場合のthis.とはどういう意味でしょうか? 例えばthis["dotMC" + j]の中に作ったthis["editMC" + j]を操作するにも 普通は、親のインスタンス名.editMC3.x = -20;となると思われますが this.editMC3.x = -20;だけで操作できるし。 階層が深くににあってもthis.だけで操作できるということか?