将不同的 class 对象传递给一个函数并在 Haxe 中获取它的属性?

Passing different class objects into a function and getting it's properties in Haxe?

将不同的 class 对象传递给一个函数并获取它的属性?

例如:

我有两个不同的 class 对象:

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 完成时访问此处传递的对象的方法。

Tween 正在传递对象,但我无法将其转换为函数以获取对象方法。

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

并且编译器总是要求类型。我试过 Dynamic / Any 但后来它说 "load method not found",如果我在函数中传递没有任何类型参数的对象,那么它将作为对象而不是 class对象。

有很多方法可以做到这一点,但其中一种是使用通用界面:

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();
    }
}

在这个具体示例中,您可以在 onComplete 回调中使用 load 来简化您的代码:

Actuate.tween (screenA, 0.6, { alpha: 1 }).ease (Sine.easeIn).onComplete (screenA.load);