理论上,这个 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-- ...?
编辑: 啊,我看到你在我发布这个之后修复了一些东西。恭喜,干得好!
我在碰撞检测中有一个关于类似问题的问题,但并不完全相同。我遇到了一个新游戏项目的问题(我正在尝试了解有关 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-- ...?
编辑: 啊,我看到你在我发布这个之后修复了一些东西。恭喜,干得好!