有没有办法将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);
},
非常感谢
答案 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){} 并重复使用它。如果有必要,请务必使用绑定,以免松动范围。