2012-02-26 7 views
0

私のステージでは、MovieClipはBoxと呼ばれ、MovieClipはInfoBoxです。インフォボックスには、setInfoという関数があります。ボックス(ボタンではなく、MovieClipです)をクリックすると、InfoBoxのsetInfo関数を呼び出すことができます。兄弟MovieClip内の関数を呼び出す

私はボックスに次のコードを使用してみました

TypeError: Error #1034: Type Coercion failed: cannot convert flash.display::[email protected] to flash.display.MovieClip. 
at Box/infoBox() 

兄弟ムービークリップ内の関数を呼び出すための適切な方法は何ですか:

MovieClip(this.parent).InfoBox.setInfo(); 

これは、次のエラーを生成?

編集
InfoBox.as次のようになります。

package { 

    import flash.display.MovieClip; 

    public class InfoBox extends MovieClip { 

     public function InfoBox() { 
      //Constructor 
     } 

     public function setInfo(){ 
      trace("info set"); 
     } 
    } 
} 
+0

どのように子供たちをステージに追加しましたか?あなたのコードを投稿できますか? – sch

+0

私はインフォボックスをフラッシュエディタで手動で追加しました。 Boxは 'stage.addChildAt(box、0); 'を使って別のスクリプトから追加されました – fishpen0

答えて

1

あなたはInfoBoxに名前を設定する必要があります。

var b:InfoBox = this.parent.getChildByName(“InfoBox”) as InfoBox; 
b.setInfo(); 
+0

'1061:静的型flash.display:DisplayObjectを持つ参照によって、おそらく未定義のメソッドsetInfoを呼び出します。 – fishpen0

+0

新しいコードを試してください。動作しない場合、 'InfoBox'には' setInfo() 'メソッドがありません。それは本当ですか?また、正しい名前を使用してもよろしいですか? – sch

+0

多分私はインフォボックスを台無しにしました。元の投稿にコードを貼り付けました。 – fishpen0

0

あなたがこれを行うことができ、子クリップから:

(parent as MovieClip).InfoBox.setInfo(); 
+0

エラーメッセージで親がステージであることがわかるので動作しません。だから '(MovieClipとしての親)'は 'null'を返します。また、私は 'InfoBox'がステージのプロパティだと疑っています。 – sch

+0

このエラーが発生します。 TypeError:エラー#1009:nullオブジェクト参照のプロパティまたはメソッドにアクセスできません。 \t Box/infoBox() – fishpen0

0

クラスの名前はインフォボックスですが、クラスの特定のインスタンス名を使用する必要があります。そして、あなたはこのようにそれにアクセスすることができます。 Flashムービーにムービークリップを手動で配置するときは、プロパティウィンドウにムービークリップの名前を付けることができます。

2

兄弟クリップで関数を呼び出さないでください。代わりに、関数呼び出しを要求したい子クラスからイベントをディスパッチし、親がリスンして、親が適切な関数を呼び出させるようにします。これは「疎結合」として知られており、長時間に渡ってうまくいきます。

+0

カップリングが緩んでいる特定の利点はありますか? – fishpen0

+0

はい。これは、同じイベントをディスパッチするものでコンポーネントを置き換えることができ、それでも機能することを意味します。または、他のコンポーネントを別のものに置き換えることもできます(または、そのクリップ/クラスを変更せずに、そのイベントに応答して完全に異なるものを作成することもできます)。 –

+0

例を挙げる:私はまだAS2に固執している会社で働いています。当社の製品のオーディオ版からテキストのみのバージョンに移行するたびに、次のボタンは命令付きのパーツがどのように構築されているかを知っているため、同じ作業を繰り返すため、卸売品を交換することはできません。代わりに、命令の各フレームに入り編集する必要があります。私は週末に約8時間を費やして、5時間ではなく約5分でオーディオからテキストに切り替えるクラスを試作しました。 –

関連する問題