2017-11-10 10 views
0

異なるクラスオブジェクトを関数に渡してそのプロパティを取得していますか?例えば異なるクラスオブジェクトを関数に渡し、Haxeでそのプロパティを取得しますか?

私は2つの異なるクラスのオブジェクトを持っている:

screenA = new ScreenA(); 
screenB = new ScreenB(); 

私はトゥイーン内のオブジェクトを渡す:

switch (state) 
{ 

    case States.SCREEN_A: 
     { 
      Actuate.tween(screenA, 0.6, {alpha: 1}).ease(Sine.easeIn).autoVisible (true).onComplete(onComp, [screenA]); 
     } 
    case States.SCREEN_B: 
     { 
      Actuate.tween(screenB, 0.6, {alpha: 1}).ease(Sine.easeIn).autoVisible (true).onComplete(onComp, [screenB]); 
     } 
} 

は、今私は、渡されたのメソッドにアクセスしたいですトゥイーンが完了すると、ここにオブジェクトが追加されます。

Tweenはオブジェクトを渡していますが、オブジェクトメソッドを取得するために関数でキャストできません。

private function onComp(screen:?) 
{ 
    screen.load(); 
} 

コンパイラは常にタイプを要求しています。 Dynamic/Anyを試しましたが、「ロードメソッドが見つかりません」というメッセージが表示されます。関数に型引数を指定せずにオブジェクトを渡すと、クラスオブジェクトではなくオブジェクトとして取得されます。

答えて

2

そこは、あなたがこれを行うことができます多くの方法をしている、が、1つは、共通のインタフェースである:

class ScreenA implements OnTweenComplete { ... } 
class ScreenB implements OnTweenComplete { ... } 

interface OnTweenComplete { 
    public function on_tween_complete(); 
} 

次に、あなたの機能は次のとおりです。

private function onComp(screen:OnTweenComplete) 
{ 
    screen.on_tween_complete(); 
} 

それとも、それを型チェックStd.isとし、それをキャスト:

private function onComp(screen:Dynamic) 
{ 
    if (Std.is(screen, OnTweenComplete)) { 
     (cast screen).on_tween_complete(); 
    } 
} 
+0

私はこれはかなりのインターフェイスを使用してについての私の考え方をクリア直接アクションスクリプトの関数にオブジェクトを渡すために使用されました。 (y) – Sim

0

をこの正確な例では、中loadを使用することができますあなたのコードを簡素化するonCompleteコールバック:

Actuate.tween (screenA, 0.6, { alpha: 1 }).ease (Sine.easeIn).onComplete (screenA.load); 
関連する問題