2015-05-25 2 views
1

Я использую 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). Не элегантный, избыточный

Заранее благодарен!

+1

Храните 'arcadeBody' как переменную уровня класса вместо того, чтобы делать это в каждой функции как локальную переменную? Я не могу придумать элегантное решение с головы. – MSGhero

+0

Я буду придерживаться этого решения. Я просто хотел узнать, был ли какой-нибудь причудливый способ сделать это в Haxe. – YannP

+0

Я просто удалил свой ответ после поиска использования 'haxe.extern.EitherType', потому что он здесь не подходит. Он подходит только для определения аргументов для внешних функций, которые могут принимать аргументы нескольких типов. Я думаю, я думаю: \ –

ответ

1

Я работал над проблемой, используя атрибут класса, который является ссылкой на body, но использует листинг.

var arcadeBody: Arcade.Body; 

public function new() { 
    //... 
    this.arcadeBody = cast(this.body, Arcade.Body); 
} 

Как @ D сторона отметил, что также можно создать подкласс Sprite из ArcadeSprite класса, который дается с приведением body атрибутом.

Смежные вопросы