从 JavaScript class 继承特征

Inheriting features from a JavaScript class

我正在尝试制作一个简单的 JavaScript 游戏。在游戏中,所有的游戏对象都应该可以拖放。现在,这段代码可以解决问题:

function create() {
  game.stage.backgroundColor = 'rgba(255, 255, 255, 0.5)'
  combinator = game.add.sprite(10, 15, 'Combinator')
  comparer = game.add.sprite(100, 15, 'Comparer')
  button = game.add.sprite(50, 15, 'Button')  

  button.inputEnabled = true;
  button.input.enableDrag(true);
  combinator.inputEnabled = true;
  combinator.input.enableDrag(true);
  comparer.inputEnabled = true;
  comparer.input.enableDrag(true);  

}

但我正在尝试为所有游戏对象创建一个 class,其中 inputEnabled= true 和 input.enableDrag(true),因此我只需要定义一次。我想是这样的:

class gameObject {
  constructor () {
    this.inputEnabled = true;
    this.input.enableDrag(true);
  }
}

但我无法理解如何在创建函数中使用它。我需要让 game.add.sprite(x,y,'name') 成为 class 的一部分吗?

您希望 class 继承自 Phaser.Sprite class:

class gameObject extends Phaser.Sprite {
  constructor (game, x, y, key) {
    super(game, x, y, key);
    this.inputEnabled = true;
    this.input.enableDrag(true);
  }
}

那么您的创建函数将如下所示:

function create() {
  game.stage.backgroundColor = 'rgba(255, 255, 255, 0.5)'
  combinator = game.add.existing(new gameObject(game, 10, 15, 'Combinator'))
  comparer = game.add.existing(new gameObject(game, 100, 15, 'Comparer'))
  button = game.add.existing(new gameObject(game, 50, 15, 'Button')) 
}

您可以创建一个工厂 class 来为您创建精灵。

class SpriteFactory {
    constructor(game) {
        this.game = game
    }

    getDraggableSprite(...spriteParameters) {
        const sprite = this.game.add.sprite(...spriteParameters)
        sprite.inputEnabled = true
        sprite.input.enableDrag(true)
        return sprite
    }
}

function create() {
  game.stage.backgroundColor = 'rgba(255, 255, 255, 0.5)'

  const spriteFactory = new SpriteFactory(game)

  combinator = spriteFactory.getDraggableSprite(10, 15, 'Combinator')
  comparer = spriteFactory.getDraggableSprite(100, 15, 'Comparer')
  button = spriteFactory.getDraggableSprite(50, 15, 'Button')  
}