理论上,这个 For-Loop 应该工作吗?

Should this For-Loop, in theory, work?

我在碰撞检测中有一个关于类似问题的问题,但并不完全相同。我遇到了一个新游戏项目的问题(我正在尝试了解有关 HTML5 Canvases 和 Socket.io 的更多信息),其中我的碰撞不起作用。我 认为 我的问题集中在碰撞上,但现在我开始思考一些不同的事情。我之所以在 for-loop 区域发布了一个不同的问题,是因为我不确定我的问题是与 for-loop 相关还是与碰撞检测相关。无论哪种方式,我都很乐意记下我的问题之一。

此代码循环每一帧以获取子弹和船只的活动位置。如果子弹碰到船,它就会被移除,一些生命值也会从船上移除。

我使用的教程:http://jlongster.com/Making-Sprite-based-Games-with-Canvas

除此之外,这是我的 checkCollisions 代码。碰撞功能似乎在起作用,因为当我开始记录每次迭代时的所有位置时,我的对象的位置似乎每次都在变化。这是我需要回调的那些 for 循环问题之一吗?

非常感谢您的帮助。我一定会 upvote/select 每一个有帮助的回复! :)

已解决!原来我的一个数组没有被正确传递。我要感谢你们告诉我总是将它拆分成多个函数,这真的帮助我解决了这个问题!

// Let's start out here: I have a players[] array
//that's essentially a list of all players on the server
// and their positions. I omitted server connection functionality since that's not my error
// source.
function checkCollisions() {
    for (var i = 0; i < players.length; i++) { // Iterating through all players
        var pos = [players[i].posX, players[i].posY];
        var size = [SHIP_WIDTH, SHIP_HEIGHT]; // This is the size of each player, it's a ship game. So these are constants.
        if (players[i].userId != PLAYER.userId) { // Each player has a userId object, this is just doublechecking if we're not uselessly iterating
            for (var j = 0; j < bullets.length; j++) { // We're now looping through bullets, an array of all the bullets being shot by players
                var pos2 = bullets[j].pos;
                var size2 = BULLET_SIZE;
                var sender = bullets[j].sender;
                if (boxCollides(pos, size, pos2, size2)) { // Collision code
                    if (sender != players[i].userId) {
                        bullets.splice(j, 1);
                        i--; // Tried here with j--, and by removing the entire line. Unfortunately it doesn't work :(
                        break;
                    }
                }
            }
        }
    }
}

您是否尝试过使用 console.log 来查看程序哪里出错了?这可能会帮助您确定是否存在多个错误,或者是否只有这个错误。如果前面的陈述有问题,你可能不知道如果你已经修复了 i-- / j-- ...?

编辑: 啊,我看到你在我发布这个之后修复了一些东西。恭喜,干得好!