1
我正在使用Haxe瞄准JavaScript使用phaser游戏框架。Haxe:覆盖`动态`类属性类型
此框架有一个Sprite
类,它可以受益于两个不同的物理引擎(但不是两者),可以是Arcade
或P2
。
我延伸它是这样的:
class Player extends Sprite {
public function new() {
super(/* ... */);
game.physics.enable(this, Physics.ARCADE); // choose the engine to use on this sprite
body.velocity.x = 500; // use the physics engine through the body attribute
}
因为它是一个JavaScript框架,该body
属性要么成为Arcade.Body
或P2.Body
取决于你绑定到精灵哪个物理引擎。
所以body
在Sprite
类定义类型为Dynamic
,我想在我的Player
类指定无论是Arcade.Body
或P2.Body
这样我就可以有利于自动完成和类型安全的。
我迄今为止的研究:
- 我试图重写属性像
var body: Arcade.Body
。编译器不高兴 - 我在
Player
的每个方法中使用了一个局部变量,如var arcadeBody = cast(body as Arcade.Body)
。不优雅,多余
在此先感谢!
将'arcadeBody'作为类级变量存储,而不是在每个函数中作为局部变量来存储?我想不出一个优雅的解决方案。 – MSGhero
我会坚持使用这个解决方案。我只是想知道是否有任何奇怪的方式来做到这一点在Haxe – YannP
我查找了'haxe.extern.EitherType'的用法后,我刚刚删除了我的答案,因为它不适合在这里。它只适用于可能需要多种类型参数的外部函数参数的定义。我在想,我在想:\ –