我正在制作游戏,我有2个阵列,一个用于子弹变量,另一个用于敌人变量。它们都有单独的for循环,使对象起作用,移动,跟随,瞄准等。我只担心现在的x和y值,它们存储在前2个数组值中(因此可能是敌人[0] [0]是x值)。
无论如何我可以合并2以便他们互动吗?
for(var i = 0; i<enemies.length;i++){
enemies[i][0]+=blah blah blah;
enemies[i][1]+=blah blah blah;
}
for(var i = 0; i<bullets.length;i++){
bullets[i][0]+=blah blah blah;
bullets[i][1]+=blah blah blah;
}
基于评论,这是我的游戏
答案 0 :(得分:2)
for(var i = 0; i < Math.max(enemies.length, bullets.length);i++){
if(i < enemies.length){
enemies[i][0]+=blah blah blah;
enemies[i][1]+=blah blah blah;
}
if(i < bullets.length){
bullets[i][0]+=blah blah blah;
bullets[i][1]+=blah blah blah;
}
}
基于评论的另一种方式:
for(var i = 0; i < bullets.length; i++){
//for each bullet
bullets[i][0]+=blah blah blah;
bullets[i][1]+=blah blah blah;
for(var j = 0; j < enemies.length;j++){
// each enemy
enemies[j][0]+=blah blah blah;
enemies[j][1]+=blah blah blah;
if(enemies[j].BBox.checkCollision(bullets[i])){
// they collide
}
}
}
如果你只有x和y坐标很难检查碰撞你需要边界框甚至可能是子弹,我建议你使用OOP
如果您至少有偏移,可以像这样进行碰撞检查:
var bbox = {
'x': 0,
'y': 0,
'width': 100,
'height': 200
};
bbox.checkCollision = function(bullet){
return (bullet[0] > bbox.x && bullet[0] < bbox.x + bbox.width
&& bullet[1] > bbox.y && bullet[1] < bbox.y + bbox.height);
}
for(var i = 0; i < bullets.length; i++){
for(var j = 0; j < enemies.length;j++){
bbox.x = enemies[j][0];
bbox.y = enemies[j][1];
if(bbox.checkCollision(bullets[i])){
// bullets[i] collide with enemies[j]
}
}
}