理论上,这个For-Loop应该有效吗?

时间:2015-05-15 21:31:47

标签: javascript for-loop collision-detection

我对碰撞检测有类似问题的疑问,但它并不完全相同。我遇到了一个新游戏项目的问题(我试图了解更多关于HTML5 Canvases和Socket.io的内容),其中我的碰撞不起作用。我认为我的问题集中在碰撞上,但现在我开始思考一些不同的东西。我在for循环区域发布不同问题的原因是因为我不确定我的问题是与循环相关还是与碰撞检测相关。无论哪种方式,我都乐意把我的一个问题放下来。

此代码循环每一帧以获得子弹和船只的活动位置。如果子弹接触到船只,它将被移除,并且一些健康点将从船上移除。

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

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

非常感谢你提供所有帮助。我一定要投票/选择每一个有帮助的回复! :)

解决了!结果我的一个阵列没有被正确传递。我要感谢你们告诉我要把它分成多个功能,这真的帮助我把它弄清楚了!

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

1 个答案:

答案 0 :(得分:1)

您是否尝试过使用console.log来查看程序的中断位置?这可能有助于您确定是否存在多个错误,或者它是否只是这个错误。如果在之前的陈述中出现了问题,如果你修复了i-- / j--,你可能不知道吗?

编辑 AH我发现这件事之后,我发现你已修好了。恭喜,干得好!