为每个循环创建一个单独的函数?使用Javascript

时间:2017-01-29 15:05:19

标签: javascript

有没有办法将forEach循环分成函数,允许我重用循环来创建不同的对象?我真的不想多次复制和粘贴循环

  createEnemies: function() {
    this.enemies = this.game.add.group(); // create a group of objects
    this.enemies.enableBody = true;

    var enemyArr = this.findObjectsByType('enemy', this.map, 'objectsLayer'); // find enemes from tilemap
    var enemy;
    enemyArr.forEach(function(element) {
      enemy = new SuperSmash.Enemy(this.game, element.x, element.y, 'enemy', +element.properties.velocity, this.map, this.player);
      this.enemies.add(enemy);
    }, this);
  },

非常感谢

3 个答案:

答案 0 :(得分:1)

舒尔:

loop.call(this,enemyarray);

像这样使用:

loop:function(arr){
  ...
 }

你也可以做loop(enemyArr),但这可能是窗口......

最好的解决方案是使循环成为游戏对象的属性(?)

MyGame.loop(enemyArr);

比你不需要绑定,如

EnemyArr=EnemyArr.map(element=>new SuperSmash.Enemy(this.game, element.x, element.y, 'enemy', +element.properties.velocity, this.map, this.player));

已将此作为MyGame绑定。

//在OPs评论后更新//

您可以查看地图功能:

myObject = new Gson().fromJson(new Gson().toJson(myHashMap), MyClass.class);

这将使用SuperSmash对象替换敌人数组中的简单对象......

答案 1 :(得分:0)

我想出了这个,到目前为止效果很好。

   createEnemies: function() {
        this.enemies = this.game.add.group();
        this.enemies.enableBody = true;
        var enemyArr = this.findObjectsByType('enemy', this.map, 'objectsLayer');
        this.loop.call(this, enemyArr, 'enemy', 'Enemy');
    },


    loop: function(arr, enemykey, enemytype) {
        arr.forEach(function(element) {
            var enemy;
            enemy = new SuperSmash[enemytype](this.game, element.x, element.y, enemykey, +element.properties.velocity, this.map, this.player);
            this.enemies.add(enemy);
        }, this);
    },

答案 2 :(得分:-1)

是的,您可以创建一个变量,如var floop = function(data){} 并重复使用它。如果有必要,请务必使用绑定,以免松动范围。