トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     関数の階層呼び出しについて
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
hirolish
Åê¹ÆNo.44219
投稿日時: 2009-12-30 19:38
新米
居住地:
投稿: 4
使用環境:
WinXP
Adobe FLASH CS4.0
ActionScript 3.0
関数の階層呼び出しについて
ActionScript2.0の本を参考にしながら、ActionScript3.0の作成を進めているのですが、関数の呼び出しで躓いてしまいました。
secondPhoto内部のbtn_mcをクリックするとactionA内の関数を呼び出すことを目的としています。

■階層関係
mainFrame(オブジェクト:mainFrame設置)
└┬actionA(ActionScript記述フレーム)
 └mainPhoto(オブジェクト:mainPhoto設置)
  ├actionB(ActionScript記述フレーム)
  └secondPhoto(btn_mcボタン設置)

▽処理が上手くいく記述▽
■actionA(ActionScript記述フレーム)
mainPhoto.btn_mc.addEventListener(MouseEvent.CLICK,syoriA)

function syoriA(event:MouseEvent): void {
syoriB(1,2,3);
}

function syoriB(a:Number, b:Number, c:Number): void {
trace(a,b,c);
}

この場合は処理がスムーズに行われるのですが

▽エラーが出る記述▽
■actionA(ActionScript記述フレーム)
function syoriB(a:Number, b:Number, c:Number): void {
trace(a,b,c);
}

■actionB(ActionScript記述フレーム)
btn_mc.addEventListener(MouseEvent.CLICK,syoriA)

function syoriA(event:MouseEvent): void {
syoriB(1,2,3);)//ここでの関数呼び出しが上手くいかない
}

▽試したこと▽
ActionScript2.0の場合_parent._parent.と記述されていたので

parent.parent.
root.mainFrame.
mainFrame.

どれを記述してもactionAの関数、syoriBを呼び出してくれませんでした
そもそも階層間でのオブジェクトは読みこめても、関数は読み込めないのか不明な為「出来るor出来ない」だけでの返信でも構いません、宜しくお願い致しますm(_ _)m
永井勝則
Åê¹ÆNo.44221
投稿日時: 2009-12-30 22:42
職人
居住地: 白馬村
投稿: 796
使用環境:
Windows 7 :Flash CS4:
10.6.8 :Flash CS5.5
Re: 関数の階層呼び出しについて
何層かに階層化されたムービークリップがあって、その中のボタンのクリックで、どこかの階層のムービークリップのタイムラインに書いてある関数を呼び出したい、という内容だと判断しました。

これはActionScript 1.0のころから「ターゲットパス」と呼ばれている方法で、ActionScript 1.0と同じように可能です。

たとえばメインのタイムライン上にgranP_mcがあり、granP_mcの中にmother_mcがあり、mother_mcの中にme_mcがあり、me_mcの中にme_btnというムービークリップがある場合、

mainTimeLine-granP_mc-mother_mc-me_mc-me_btnという階層関係があります。

granP_mcのタイムラインに関数を定義すると、それはgranP_mcの所有物になります。

granP_mcはmc_btnの親の親なので、mc_btnのリスナー関数では
parent.parentでgranP_mcは参照できます。

var granP:MovieClip = parent.parent as MovieClip;
granP.granP_mcで定義した関数名();
でgranP_mcに定義した関数は呼び出すことができます。

(とはいえ、今書かれているコードで確実にリスナー関数は呼び出されていますか?)

階層を重ね過ぎて、どれがどれだか分からなくなったら、
面倒でも各ムービークリップにtrace("名前" + this);を書いて、出力結果を検討すると、相手を探しやすくなります。

個人的にはあんまり複雑にしない方が、あとあとのためにはよいと思います。


----------------
永井勝則:
himco.jp :

hirolish
Åê¹ÆNo.44224
投稿日時: 2009-12-31 3:13
新米
居住地:
投稿: 4
使用環境:
WinXP
Adobe FLASH CS4.0
ActionScript 3.0
Re: 関数の階層呼び出しについて
こちらが私のレベルではどのような処理をしているのか分からなかったので、調べてみました。

引用:

var granP:MovieClip = parent.parent as MovieClip;
granP.granP_mcで定義した関数名();
でgranP_mcに定義した関数は呼び出すことができます。

rootやparentをActionScript3.0で使う場合、ダイナミッククラスに明示的にキャストが必要なんですね
(こういう表現があっているのか不明なレベルです)

下記のように書き直した結果、無事に関数を呼び出すことができました。

var granP:MovieClip = parent.parent as MovieClip;
granP.granP_mc.abc();

var obj:MovieClip = root as MovieClip;
obj.granP_mc.abc();



>個人的にはあんまり複雑にしない方が、あとあとのためにはよいと思います。
出来るだけActionScriptを一ヶ所にまとめたいと思います。
ターゲットパス含めて丁寧な解説を頂きましてありがとうございました。
最初の引用部分を理解するまで時間がかかり、お礼が遅れまして申し訳ございませんでしたm(_ _)m
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops