为每个循环重用不同的游戏敌人对象

时间:2017-01-21 22:20:03

标签: javascript phaser-framework

我正在使用Phaser创建一个游戏,这是一个Javascript框架。为了加载敌人,我正在为每个循环使用a。敌人数据从JSON文件中读取(从磁贴编辑器导出)。

然而,我的游戏有几种类型的敌人,飞行,跑,跳。每个敌人都使用不同的精灵。

有没有办法加载每种类型的敌人,而不是为每个循环使用几个? 在创建新类型的敌人时(使用new关键字),我需要将参数从敌人更改为飞行敌人

 SuperSmash.playState.prototype.createEnemies = function() {
   "use strict";
    this.enemies = this.add.group();
    var enemyArr = this.findObjectsByType('enemy', this.map,'objectslayer');



 **//I need to RESUSE this loop for each type enemy**

    var enemyz;
    enemyArr.forEach(function(element){
      enemyz = new SuperSmash.Enemy(this.game, element.x, element.y, 'enemy', +element.properties.velocity, this.map, this.player);
      this.enemies.add(enemyz);
    }, this);
  };



  findObjectsByType: function(targetType, tilemap, layer) {
    var result = [];
    tilemap.objects[layer].forEach(function(element) {
      if (element.properties.type == targetType) {
        element.y -= tilemap.tileHeight;
        result.push(element);
      }
    }, this);
    return result;
  },

1 个答案:

答案 0 :(得分:0)

你的意思是这样的吗?:

function createEnemies(type, enemies) {
  enemyArr.forEach(function(element){
    let enemyz = new SuperSmash.Enemy(this.game, element.x, element.y,
        type, +element.properties.velocity, this.map, this.player);
    enemies.add(enemyz);
  }, this);
};

SuperSmash.playState.prototype.createEnemies = function() {
  "use strict";
  this.enemies = this.add.group();
  var enemyArr = this.findObjectsByType('enemy', this.map,'objectslayer');
  createEnemies.call(this,'enemy',this.enemies);
}