2017-11-10 80 views
0

將不同的類對象傳遞給函數並獲取它的屬性?將不同的類對象傳遞給一個函數並在Haxe中獲取它的屬性?

例如:

我有兩個不同的類對象:

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

是有很多的,你可以做到這一點的方式,但一個是有一個共同的接口:

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); 
相關問題