2017-01-29 2 views
-2

Есть ли способ выделить цикл forEach в функцию, позволяющую мне повторно использовать цикл для создания разных объектов? Я действительно не хочу, чтобы скопировать и вставить в петлю много разСоздание отдельной функции forEach loop? Javascript

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); 
    }, 

Большое спасибо

ответ

1

Shure:

function loop(arr){ 
    arr.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); 
} 

Использование так:

loop.call(this,enemyarray); 

Вы также можете сделать петлю (enemyArr), но чем это было бы окно ...

Лучшим решением было бы сделать петлю свой объект игры (?)

loop:function(arr){ 
    ... 
} 

Чем вам не нужно переплета, а

MyGame.loop(enemyArr); 

уже связывает это как MyGame.

// ОБНОВЛЕНИЕ ПОСЛЕ ФОС КОММЕНТИРОВАТЬ //

Вы можете посмотреть на карте функции:

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

Это заменит ваши простые объекты в Enemy массив с SuperSmash объектов ...

+0

что это такое? Теперь у меня есть другой контекст – charlietfl

-1

Да, вы можете создать переменную, как вар Floop = функция (данные) {} И использовать его. Просто обязательно используйте привязку, если необходимо, чтобы не потерять область видимости.

+0

это скорее комментарий. –

+0

Спасибо всем, я пропустил важную деталь, в evertime Я запускаю для каждого цикла, объект, который я создаю с ключевым словом NEW, должен измениться. Мне нужно подумать о новом способе для этого (возможно, с json-файлом, в котором хранятся типы врагов). loop 1 ----------------- enemy = new SuperSmash.Enemy (this.game, element.x, element.y, 'enemy', + element.properties. скорость, this.map, this.player); loop 2 ------- enemy = new SuperSmash.Bat (this.game, element.x, element.y, 'bat', + element.properties.velocity, this.map, this.player) ; – stckpete

+0

@stckpete: оставив коммент где-нибудь, просто заметите пользователя, которого вы комментируете .. и, пожалуйста, поместите код в свой вопрос, его трудно прочитать –

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); 
    }, 
+0

, поскольку это основано на моем ответе (я считаю) было бы справедливо нажать зеленую кнопку галочки, и, кстати, вы можете просто сделать this.loop (enemyArr, «враг», «враг») поскольку это уже связано с вашим игровым объектом –

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