需要帮助合并2个位置数组和for循环

Need help merging 2 position arrays and for-loops

本文关键字:数组 for 循环 位置 2个 帮助 合并      更新时间:2023-09-26

我正在制作一款游戏,我有两个数组,一个用于子弹变量,另一个用于敌人变量。它们都有独立的for循环,让目标发挥作用、移动、跟随、瞄准等。我现在只担心x和y值,它们存储在前两个数组值中(所以一个可能是敌人[0][0]是x值)。

有什么方法可以合并这两个,使它们相互作用吗?

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

基于评论这是我的游戏

https://i.stack.imgur.com/gqjlO.jpg

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]
        }
    }
}