2011-12-08 3 views
2

外部クラスからFlashのルートタイムラインの内側にある関数を呼び出したいとします。AS3 - クラスのルートタイムラインで関数を呼び出す

このコードは、クラスからです:

メインのタイムラインで
private function loadImage(event:Event):void 
{ 
    addToContainer() 
} 

function addToContainer():void 
{ 
    trace("Called") 
} 

それを管理するためにどのように?

+0

いくつかのコードが役に立ちます。 – robertp

+0

コードを追加しました。 – Tom

答えて

0

は、メインのタイムラインにアクセスするために

MovieClip(root)

を使用してみてください。

+0

申し訳ありませんが、動作していません。 – Tom

+2

@Tomあなたのクラスが 'DisplayObject'であることを確認し、これが動作するためにはステージに追加される必要があります。これらのいずれも可能でない場合(外部クラスでDisplayObjectをベースとして使用していない場合)、メインタイムラインまたは少なくともDisplayObjectを他の場所に渡す必要があります。 – Marty

+0

クラスをDisplayObjectにするにはどうすればいいですか? – Tom

2

addToContainer()をタイムラインに配置する必要がありますか?

タイムラインからコードを完全に削除し、代わりにaddToContainerを使用して "ドキュメントクラス"を作成することを検討します。これにより、あなたが見ているものを簡単に追跡することができます。

public class FunctionTest extends MovieClip { 
    protected static var _this:FunctionTest; 
    function FunctionTest() { _this = this; } 
    public static function get application_root():FunctionTest { return _this; } 
    public function addToContainer():void { trace("Called"); } 
} 

ここでは、loadImageを作成する方法が2つあります。それは(マーティ・ウォレスの以前のコメントどおり)のDisplayObject以内ならない場合は、あなたが

(this.root as FunctionTest).addToContainer(); 

ような何かを言うことができる、あなたはどこからでも使用できる選択肢を持っている:

FunctionTest.application_root.addToContainer(); 

あなたが本当にしている場合タイムラインでaddToContainer()を定義するには、表示クラスへのリンクを使用して外部クラスを初期化する必要があります。

public class LoadImageClass { 
    protected var _stored_root:MovieClip; 
    function LoadImageClass(new_root:MovieClip) { this._stored_root = new_root; } 
    public function loadImage():void { 
     this._stored_root.addToContainer(); 
    } 
} 
+0

はい、タイムラインにaddToContainer()を追加する必要があります。申し訳ありません。 – Tom

+0

したがって、外部クラスにディスプレイルートへのリンクを渡す必要があります。どのように見えるかの例を示すために私の答えを更新しました。 –

0

メインタイムラインのオブジェクトにイベントリスナーを追加できます。このイベントがオブジェクトでトリガされると、メインタイムラインの関数が呼び出されます。

//Main Timeline 
var obj:YourExternalClass = new YourExternalClass(); 

obj.addEventListener(MouseEvent.CLICK, addToContainer); 
0

最良かつ最も簡単な方法は、あなたのクラスにパラメータとしてメインのタイムラインをプッシュすることです:あなたのメインのタイムラインのセットになりました

public static var _this:Object; 

:あなたのクラスの変数を設定し

この変数:あなたのクラスで今

MyClass._this=this; 

あなたは0123を使用して、メインのタイムラインへのアクセス権を持っています変数:

_this.addToContainer() 

IH☺PEこれが役立ちます。

関連する問題