Я использую Haxe для таргетинга на javascript, используя фреймворк phaser.Haxe: переопределить атрибут класса `Dynamic` типа
Этот каркас имеет класс 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
}
Потому что это Java-основа, атрибут body
либо стать Arcade.Body
или P2.Body
в зависимости от физического движка привязываются к спрайта.
Так body
набирается, как Dynamic
в определении Sprite
класса, и я хотел бы указать в моем Player
классе является ли это Arcade.Body
или P2.Body
, так что я могу принести пользу авто-завершения и безопасности типа.
Мои исследования до сих пор:
- Я попытался переопределить атрибут как
var body: Arcade.Body
. Компилятор не в восторге от этого - Я использовал локальную переменную во всех методах
Player
какvar arcadeBody = cast(body as Arcade.Body)
. Не элегантный, избыточный
Заранее благодарен!
Храните 'arcadeBody' как переменную уровня класса вместо того, чтобы делать это в каждой функции как локальную переменную? Я не могу придумать элегантное решение с головы. – MSGhero
Я буду придерживаться этого решения. Я просто хотел узнать, был ли какой-нибудь причудливый способ сделать это в Haxe. – YannP
Я просто удалил свой ответ после поиска использования 'haxe.extern.EitherType', потому что он здесь не подходит. Он подходит только для определения аргументов для внешних функций, которые могут принимать аргументы нескольких типов. Я думаю, я думаю: \ –