Flash初心者です。
色々と探し回ったのですが、似た問題の解決法が見付けられなかったので質問させて頂きます。
FlashMX2004を使っております。
内容ですが…
rootから数えて4階層下の「hit_area」というムービークリップ自体を変数「this」として、そこから2階層上の、2つ目のフレームラベル「damage」の最初のフレームのムービークリップ(インスタンス名は付けてません)の1階層下の「attack_hit」という関数に引数として渡したいのです。
同じ要領で、rootから数えて4階層下の、同じ「hit_area」を、そこから3階層上の最初のフレームに書かれている「attack_hit」という関数に渡すことは出来ました。
後者のスクリプトは…
onEnterFrame = function() {
_parent._parent._parent.attack_hit(this);
}
です。
これを真似て、前者を…
onEnterFrame = function() {
_parent._parent.damage.attack_hit(this);
}
としてみましたが、うまくいきませんでした。
これで理解して頂けるかわかりませんが、ご理解頂けましたらどうすればよいか教えて下さい。
似たような引渡しが出来れば違う方法でも結構です。
宜しくお願いします。
No.1
- 回答日時:
ご質問から階層構造を考えると次のようになります。
_root
└ムービークリップ 「?1」 - attack_hit ○
└ムービークリップ 「?2」
├ムービークリップ 「?3」 - attack_hit ×
└ムービークリップ 「?3’」
└ムービークリップ 「hit_area」
さらに,
> ムービークリップ(インスタンス名は付けてません)の
> 1階層下の「attack_hit」という関数に引数として渡したいのです。
ということですから,
相対パス自体は次のようになります。
_parent._parent.damage.attack_hit(this);
↓変更↓
_parent._parent.ムービークリップ 「?3」.attack_hit(this);
少なくとも,
ムービークリップ 「?3」 にはインスタンス名が必要ですね。
それと,
↓階層 ↓階層 ↓フレームラベル
_parent._parent.damage.
このような勝手なルールは最初から通じません。
あえて似たようなことをするのでしたら,
_parent._parent.ムービークリップ 「?3」.gotoAndStop("damage");
_parent._parent.ムービークリップ 「?3」.attack_hit(this);
となります。
その時に存在しないオブジェクトになど命令はできません。
関数も,それ以前に定義されていないと実行できません。
この回答への補足
補足と整理をさせて頂きます。
ご回答の通り、ムービークリップに名前を付け、整理したところ…
_root
└ムービークリップ「char1」
└ムービークリップ「char」
├ムービークリップ「stand_mc」ラベル「stand」(フレーム1)
├ムービークリップ「damage_mc」ラベル「damage」
└ムービークリップ「attack_mc」ラベル「attack」
└ムービークリップ「hit_area」
となりました。
質問の後に試した場合も入れ、質問の時の例に当てはめると…
_root
└ムービークリップ「char1」― attack_hit ○
└ムービークリップ「char」― attack_hit ○
├ムービークリップ「stand_mc」― attack_hit ×
├ムービークリップ「damage_mc」― attack_hit ×
└ムービークリップ「attack_mc」
└ムービークリップ「hit_area」
となりました。
直接「damage_mc」内へ引数が渡せなかったので、フレーム1にある「stand_mc」なら出来るのではと思い、「hit_area」に…
_parent._parent.stand_mc.attack_hit(hit_area);
と書いて試してみましたが、「stand_mc」の中へも入れません。
質問の時に実証済みの通り、階層を上がることは出来ます。
更に、成功した「char1」より余計に1階層上に上がってから「char1」に戻るパスを書いてみると、ちゃんと中へ入ることが出来ました。
No.2ベストアンサー
- 回答日時:
#1です。
一応書かれていらっしゃるような階層構造を作成しました。
そして,
stand_mc の フレーム1 には次のように書き,
------------------------------
function attack_hit(AAA) {
trace(this);
trace(AAA);
}
------------------------------
damage_mc の フレーム1 にも同じく次のように書き,
------------------------------
function attack_hit(AAA) {
trace(this);
trace(AAA);
}
------------------------------
hit_area の フレーム1 には次のように書いて,
------------------------------------------
this.onEnterFrame = function() {
_parent._parent.stand_mc.attack_hit(this);
_parent._parent.damage_mc.attack_hit(this);
delete this.onEnterFrame;
};
------------------------------------------
「制御」→「ムービープレビュー」してみた結果,
一応次の値が出力されました。
出力結果↓
//////////////////////////////////////
_level0.char1.char.stand_mc
_level0.char1.char.attack_mc.hit_area
_level0.char1.char.damage_mc
_level0.char1.char.attack_mc.hit_area
//////////////////////////////////////
パスは合っているようですよ。
ただ,
hit_area の フレーム1 に this.onEnterFrame = function()
を除いて,
_parent._parent.stand_mc.attack_hit(this);
_parent._parent.damage_mc.attack_hit(this);
だけを書いた場合は何も実行されませんでした。
この2行のスクリプトを
今度はフレーム2に移動させれば実行されました。
つまりパスは合っているのですが,
stand_mc と hit_area に function attack_hit が定義されるタイミングが,
hit_area のフレームで実行される attack_hit(this); より遅くなるようです。
この時間差をなんとかすれば(上の場合 onEnterFrame でずらす),
うまく行くと思います。
お手数お掛けしまして申し訳ないです。
ありがとうございます。
パスの問題はクリアとのことなので、あとはタイミング合うように頑張ります。
お世話になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javascriptで変数を組み込みたい 2 2023/01/13 09:52
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- その他(プログラミング・Web制作) VBA 1 2023/01/19 16:19
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- Excel(エクセル) Excelの数式についての質問 1 2022/10/31 15:50
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- 英語 ソシュール言語観による品詞、単語、辞書理解の誤り 4 2022/11/24 12:27
- 英語 コウノトリの孵化 5 2022/10/19 09:07
- Excel(エクセル) エクセル、日々の集計整理方法。(再送です。) 5 2022/10/02 00:19
- Excel(エクセル) マクロ/VBAについて教えてください。 10 2022/05/27 12:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
三角形ABCのBを可変にしたい
-
フレームでページ分かれていて...
-
Flashで右クリックメニューにつ...
-
C言語 バッファについて。
-
画面全体にマスク
-
C#でDLLファイル読み込みを行う...
-
Flashファイルのループ再生方法
-
URLを隠す、または別アドレスな...
-
FLASH上でインラインフレームみ...
-
車の運転時のメガネ 縁なし(...
-
ハードディスク DVD 読み...
-
長方形がランダムに消えるやつ
-
Directshowを使って動画を画像...
-
2Dゲーム作成する際、アニメー...
-
A.S 3.0 キーボードでのフレー...
-
FlashMX フェードアウト
-
ムービークリップの位置と角度...
-
フレーム内のオプションボタン...
-
メガネのフレームが半分に折れ...
-
VBで動的に作成したパネルの上...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
actionscript3.0で親階層にある...
-
【AS3.0】Timerとタイムライン
-
イメージギャラリーの最後まで...
-
Flashで右クリックメニューにつ...
-
フレーム内に移動したい
-
ソーラーパネルのアルミフレー...
-
HPを作りたい
-
【C#】wavファイルの複数同時再生
-
phpで音を鳴らす
-
ドロップフレームの計算をエク...
-
フレーム内のオプションボタン...
-
車の運転時のメガネ 縁なし(...
-
C#でDLLファイル読み込みを行う...
-
オプションボタンを矢印キーで...
-
WEBブラウザの重複起動の禁止
-
VBで動的に作成したパネルの上...
-
Access2010でサブフォームのフ...
-
webサイトに動画をはりつけ、ク...
-
PS5やPS4proに関して質問です。...
-
B2ポスターフレームの自作
おすすめ情報