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で質問しましょう!
似たような質問が見つかりました
- JavaScript addEventListener()でリスナー関数に名前を付ける構文を教えてください 1 2023/07/01 17:31
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/04/21 13:46
- Access(アクセス) マイクロソフト アクセス2021のフォームビュー作成でレイアウトを帳票形式から単票形式にあとから変更 1 2023/03/03 10:56
- ネットワーク ホームページを何度もリロードしてるとブラックリストに入れられてアクセスできなくなりますか? 1 2023/03/30 12:18
- その他(パソコン・スマホ・電化製品) ウイルスバスターの制限解除方法 1 2022/08/09 22:08
- その他(ソフトウェア) PC上のOutlookでIMAPアクセス時の送信が出来ない。Android上では問題なし。 2 2022/09/28 11:22
- 薬剤師・登録販売者・MR 変更調剤について 1 2022/05/22 11:50
- UNIX・Linux ubuntuのサーバー(virtual box)が、再起動するとデータが消えてしまいます。 4 2022/04/27 21:29
- 固定IP Win10を使用 最近、インタネット回線がアクセスなしになります。 2 2022/10/04 13:41
- YouTube Google PlayStoreにある動画ダウンロードアプリmovie BOXでYouTubeの動画 1 2022/03/24 20:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CreateDialogについて
-
VB6.0で、フォームから、別のフ...
-
webページ上、TABフォーカス出...
-
マスクをとるとオーバーフロー...
-
VBScriptでMsgBoxのYesNoボック...
-
RPG(AS400)の本、サイトってあ...
-
ランダムに4桁の数字を表示する...
-
VBAで改行の入ったデータの正規...
-
テキストボックスの中身をリセ...
-
python ボタンを押すと複数の関...
-
全てのテキストボックスをセル...
-
コモンダイアログのshowopenに...
-
別のアプリケーションのテキス...
-
マウスクリックした回数がカウ...
-
Adobe Flash Player 9 のテキ...
-
Excelのマクロについて!早急で...
-
テキストボックスにセルの値を...
-
static関数がmapファイルに載ら...
-
Motifのイベントの制御について...
-
【Photoshop】レイヤー効果の境...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【VB.NET】別Formのボタンが押...
-
フォームの生成と破棄
-
DataTableの件数を取得したい
-
ウインドウハンドルとインスタ...
-
Flash ステージに初期配置したM...
-
インスタンスとポインタ
-
gotoAndPlay gotoAndStopについて
-
フラッシュのことで質問です
-
タイプライブラリ
-
Python でシャットダウンのコマ...
-
Flash ActionScriptで変形点を...
-
チェックボックスの制御(onCli...
-
画像を一定時間ごとに切り替え...
-
フェードイン-(待機)-フェー...
-
CREATESTRUCT と GetWindowLong
-
ハンドルからインスタンス?を取...
-
「Me」を「Form1」にするとエラ...
-
【FLASH】インスタンス名の一覧...
-
メール
-
ムービークリップ内に配置した...
おすすめ情報