No.2ベストアンサー
- 回答日時:
確かに分かりずらいご質問ですね...。
なぜかと言うと
「A.b.addEventListener...を b.addEventListener...に変更」
「オブジェクトの重なり順を変更する」
「Aの中にあるbをAのBOXから出す」
この3つは,基本的には全く別のことだからです。
3つとも全てに回答すれば
そのうちのどれかが求めていらっしゃることに当たるかもしれません。
以下ではすべて,
はじめに次のようなタイムライン階層になっているものとします。
スクリプトを書く階層(=this)
└A(ムービークリップ)
└b(ムービークリップ)
※ A 内の c は登場しないようなので略します。
=== === ===
(1)A.b.addEventListener...を b.addEventListener...に変更
ActionScript 3.0 では,
ムービークリップにインスタンス名を付けると言っても
結局のところインスタンスは「変数」で管理するようになっています↓。
・[AS3] MovieClipインスタンスとインスタンス名
http://f-site.org/articles/2008/04/19014939.html
したがって
> A.b.addEventListener.....とアクセスするのを、
> b.addEventListener....で、アクセス出来るように変更
これは簡単なことで
次の1行のスクリプトを書けば良いだけです。
-------------------------------
//変数「b」に 「A」内の「b」の参照を代入
var b:MovieClip = A.b;
-------------------------------
これで本当にできているのか,
「制御」→「ムービープレビュー」で検証する用のスクリプトも書いておきます。
-------------------------------
//変数「b」に 「A」内の「b」の参照を代入
var b:MovieClip = A.b;
//「b」クリック時に 関数bClick を実行
b.addEventListener(MouseEvent.CLICK,bClick);
//関数bClick の定義
function bClick(e:Event):void {
//「b」のインスタンス名でも出力させてみる
trace(e.currentTarget.name);
}
-------------------------------
(2) オブジェクトの重なり順を変更する
重なり順とはZ軸の表示順序で,
ActionScript 1.0/2.0 時代の名残かもしれませんが深度とも言われます。
・ActionScript 3.0「深度」
http://www.yosukesugahara.com/diary/actionscript …
・AS3.0リンケージ深度やレイヤー階層
http://d.hatena.ne.jp/jedisystemer/20100113/1263 …
上記ページなどに書いてあるように,
重なり順は setChildIndex や swapChildren などで変えます。
「A」内の「b」を,「A」の箱から出したように見せるには
次のようにして「A」内での「b」の重なり順を一番上にしても良いでしょう。
-------------------------------
//「A」内の最高深度を取得
var h_depth:int = A.numChildren - 1;
//「A」内の「b」を「A」内の最高深度にする
A.setChildIndex(A.b, h_depth);
-------------------------------
下の添付図↓は,
上記スクリプトを実際に確かめてみた様子です。
添付図のようなものを作成した場合,
「A」内の「b」が,「A」内に描いた箱の外(上)に表示されるようになります。
(3) Aの中にあるbをAのBOXから出す
つまりインスタンス自体のタイムライン階層を
次のように↓変更するということですね。
スクリプトを書く階層(=this)
├b(ムービークリップ)
└A(ムービークリップ)
これは ActionScript 2.0 まではできなかったことなのですが
ActionScript 3.0 では概念が変わったため簡単にできます。
たった1行です↓。
-------------------------------
//この階層に「A」内の「b」を配置
this.addChild(A.b);
-------------------------------
(1)~(3) の3通りの回答をしてみました。
ここまで書いて思うのですが,
仮に (3) の「Aの中にあるbをAのから出す」が求めていらっしゃることだったとします。
しかし
(3) をしても (1) の「A.b.addEventListener...を b.addEventListener...に変更」 をしたことにはなりません。
次のように試してみるとわかります。
「bなど存在しないよ!」という内容のエラーが出ると思います。
-------------------------------
//この階層に「A」内の「b」を配置
this.addChild(A.b);
//「b」クリック時に 関数bClick を実行
b.addEventListener(MouseEvent.CLICK,bClick);
//関数bClick の定義
function bClick(e:Event):void {
//「b」のインスタンス名でも出力させてみる
trace(e.currentTarget.name);
}
-------------------------------
なぜエラーが出るのかという理由は (1) で書いたURLページの説明にある通りで
「b」という変数がスクリプトを書いた階層に存在しないからです。
したがって
(1) と (3) の両方をする場合は
(1) のことも (3) のことも両方ともしなければならないということになります。
(1) と (3) とは全く別のことですから。↓
-------------------------------
//変数「b」に「A」内の「b」の参照を代入
var b:MovieClip = A.b;
//この階層に変数「b」が参照するMCを配置
this.addChild(b);
//「b」クリック時に 関数bClick を実行
b.addEventListener(MouseEvent.CLICK,bClick);
//関数bClick の定義
function bClick(e:Event):void {
//「b」のインスタンス名でも出力させてみる
trace(e.currentTarget.name);
}
-------------------------------
長くなりましたが以上です。
ありがとうございます!!
説明分かりづらくてすみません!!
自分のやりたかったのはまさに(3)でした!!
すごく分かりやすい説明で大変勉強になりました!
またなにかありましたらよろしくお願いします!!!
No.1
- 回答日時:
AのparentにbをaddChildすれば
かってにAからはremoveされますが
重ね順はどうやったって変わってしまいます
それにちゃんと外に出したらAにかかってた
transformとかfiltersとかを乗じてやんないと
ちゃんともとの位置と形になりません
しかもtransform.matrixって
getter setter実装な上に
matrix.concatは結果を返さないから
一回どっかに格納してわたさないといけない
めんどいです
var mtx=A.b.transform.matrix
mtx.concat(A.transform.matrix)
A.b.transform.matrix=mtx
A.parent.addChild(A.b)
とりあえずmatrixだけでいいならこんなカンジ
あとアニメーションとかしてたら
そっちにも反映してやらんといけない
把握しきれないならやらない方がいいです
っていうか階層構造変えるとかやらないほうがいいです
あっちで参照が切れてエラーになっただの
こっちでアニメーションが変になっちゃっただの
ろくなことが起きません
どうしてもやらないとダメなんですか?
ありがとうございます!
おかげさまでやり方分かりました!
はい、どうしてもやりたいんです。
たしかにあまり複雑にしてしまうと大変そうですね!
参考にさせてもらいます!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像を一定時間ごとに切り替え...
-
SharedObjectの使い方(長文です)
-
外部テキストから画像やリンク...
-
XMLでJPEGスライドを作成_表示...
-
斜めに移動
-
スクロールバーの自作の仕方
-
フォームのテキストの入力数字...
-
外部テキストのタグ
-
DirectXでのicoファイル読み込み
-
最後のフレームでジャンプするU...
-
外部テキストファイルでは文字...
-
PythonでSetWindowPosを使うに...
-
AS3.0で地面にバウンドするよう...
-
【Flash】マスクでスポットライ...
-
レーダーチャートの描画
-
PDFからepubに変換するウェブサ...
-
upc 7915と mc7915ctは互換性有...
-
ステージの背景画像のみ拡大縮...
-
ボタンのカウント数でムービー...
-
ActionScriptをつかってテキス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【VB.NET】別Formのボタンが押...
-
VB6.0で、フォームから、別のフ...
-
インスタンスとポインタ
-
DataTableの件数を取得したい
-
カーソルを手に変更
-
「Me」を「Form1」にするとエラ...
-
CreateDialogについて
-
SharedObjectについて
-
オブジェクトの重なり順の変更
-
プログラミング、アーキテクチ...
-
VB6.0のHideのバグ?
-
先読み画像を後で生成するMCの...
-
ボタンインスタンスの_nameプロ...
-
クラスのプロパティ一覧を列挙...
-
1000個のMCにa1~a1000のイン...
-
BitmapをIDで指定したい
-
ActionScript3.0で画面を揺らす...
-
Python でシャットダウンのコマ...
-
Win32 API ウィンドウ
-
MouseEventについて教えてください
おすすめ情報