2017-11-10 37 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); 
相关问题