複数生成したムービーの中のムービーはドラッグ移動できないようにしたい。
環境はActionScript3.0です。
chipというシンボルからdotMC+連番というインスタンスを複数生成しながら
ドラッグできるようにして、その中にeditMC+連番というインスタンスを
生成しました。
ところがdotMC+連番はドラッグできるのですが、editMC+連番もドラッグすると
それ単体で移動してしまいます。
おそらくevent.targetにしているのでeditMC+連番単体でも
動いてしまうのでしょうが、それを動かないようにできないでしょうか。
宜しくお願いします。
for(var j=0; j<10; j++) {
var dotMC:chip = new chip();
dotMC.name="dotMC"+j;
addChild(dotMC);
dotMC.addEventListener(MouseEvent.MOUSE_DOWN, chipMCmove);
dotMC.addEventListener(MouseEvent.MOUSE_UP, chipMCStop);
var editMC:edit = new edit();
editMC.name="editMC"+j;
chipMC.addChild(editMC);
}
//▼▼▼▼▼▼▼ドラッグ可能にする
function chipMCmove(event:MouseEvent):void {
event.target.startDrag();
}
function chipMCStop(event:MouseEvent):void {
event.target.stopDrag();
}
No.2ベストアンサー
- 回答日時:
#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;
-----------------------------
この回答への補足
よく分かりました。目から鱗です。
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.だけで操作できるということか?
No.3
- 回答日時:
#1&#2 です。
#2の補足で書かれていらっしゃる内容全般に関しては
「配列アクセス演算子」 と Google などで検索してみてください。
「配列アクセス演算子」 は ActionScript 1.0 ~3.0 まで共通です。
http://www.google.co.jp/search?hl=ja&source=hp&q …
> この場合のthis.とはどういう意味でしょうか?
ActionScript 3.0 の場合で フレームにスクリプトを書く場合は
ごく単純で 「this」=「そのスクリプトを書いたタイムライン」 です。
メインのタイムラインでしたら 「root [ MovieClip(root) ]」 です。
そのスクリプトを書いたタイムラインということは
まだ難しいですが色々資料を見て
自分なりに理解していけると思います。
お手数掛けましたと同時に勉強になりました。
ありがとうございました。
No.1
- 回答日時:
まず 「おや?」 と思う箇所ですが,
> 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()を
使えということでしょうか?
宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- JavaScript Google reCAPTCHAについて 1 2023/02/22 14:37
- JavaScript gasについて 1 2022/05/31 21:51
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- Google Drive Googleドライブでのファイルの移動 2 2022/11/01 14:23
- Illustrator(イラストレーター) プロパティパネルを元に戻したい 3 2022/05/02 23:26
- デスクトップパソコン PCでファイルを右ドラッグして出てくるメニューの編集方法を教えて下さい 2 2023/01/17 13:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Python でシャットダウンのコマ...
-
プログラミング、アーキテクチ...
-
VB6.0のHideのバグ?
-
【VB.NET】別Formのボタンが押...
-
VBAで改行の入ったデータの正規...
-
arduino プログラムについて
-
コモンダイアログのshowopenに...
-
テキストボックスの中身をリセ...
-
別のアプリケーションのテキス...
-
シンボル化解除の方法
-
VBScriptでMsgBoxのYesNoボック...
-
テキストボックスにセルの値を...
-
四乗根を英語で言うと・・・
-
VB6.0 でメニューを作りたいん...
-
pythonの画像の貼り付けについて
-
SNMPの標準MIBについて
-
YOASOBI
-
マスクをとるとオーバーフロー...
-
マウス自体の移動量の取得
-
else if文の順序を変えることに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミング、アーキテクチ...
-
【VB.NET】別Formのボタンが押...
-
CreateDialogについて
-
DataTableの件数を取得したい
-
VB6.0で、フォームから、別のフ...
-
VB6.0のHideのバグ?
-
「Me」を「Form1」にするとエラ...
-
new演算子について教えていただ...
-
インスタンスとポインタ
-
フェードイン-(待機)-フェー...
-
Win32 API ウィンドウ
-
画像を一定時間ごとに切り替え...
-
Python でシャットダウンのコマ...
-
フォームの生成と破棄
-
CREATESTRUCT と GetWindowLong
-
インスタンスからハンドルを得...
-
【Flash As3.0 音データをイ...
-
ActionScript3.0で画面を揺らす...
-
アドビ フラッシュ CS3 「だ...
-
photoshopで書いた四角の枠の中...
おすすめ情報