将不同的 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);
将不同的 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);