Phaser:按字符串引用

时间:2018-02-21 14:27:15

标签: javascript phaser-framework

我正在和一位"经理"选择什么作物应放在某个地块上。每种作物都有完全不同的设计,因此它们有自己的类/对象。然而,不是写出将要实例化该类的40个不同的行,而是希望1行只包含与类的确切名称匹配的字符串然后运行它。这样我的代码就会保持干净。我尝试了一些东西,但从未设法完成它。通常会导致以下错误:

TypeError: this.crop is not a constructor

我试图运行的代码

export default class CropManager extends Phaser.Group {
  constructor (game, className, plotId) {
    super(game)
    this.x = 0
    this.y = 0
    this.plotId = plotId

    this.className = className
    this.cropHandler(this.className)
  }

  // Defines which class to call

  cropHandler (className) {
    const ActualClass = 'plot' + className

    this.cropclasses = { ActualClass: ActualClass}
    this.crop = this.cropclasses[ActualClass]
    this.classRun = new this.crop(this.game, this.x, this.y, this.plotId)

    this.add(this.classRun)
  }
}

注意每个裁剪的classname = crop + cropname(cropCarrots,cropCows等)

1 个答案:

答案 0 :(得分:1)

重新考虑在this.cropclasses中存储键值对的方式。它现在的方式,它将'ActualClass'作为键,'plotNameOfTheClass'(或任何'plot' + className产生的)作为值,因此,当稍后作为数组访问它时,{{ 1}}未定义,因为地图中没有this.crop键。