我正试图制作一个小游戏,只是为了它的乐趣,我有一些碰撞问题。
我在画布上绘制了一个玩家,并在另一个画布上绘制了一些块(16 x 16px)。
但是我在检测水平碰撞时遇到了问题。
...
我的问题归结为:
我的播放器使用存储为:
的x y坐标var p_x; var p_y;
这些值是玩家左下角坐标,以像素为单位。
但是我的块是一个名为:
的二维数组var g_levelarray;
每个块都是16 x 16像素,例如,如果我这样做:
g_levelarray[3][2] = 1;
表示将在画布左侧绘制一个块:48px和画布底部32px
...
然后我有我的代码来检查块是否存在(根据玩家)x和y是玩家坐标
function blockexists(x, y) {
var xpos = parseInt(x / g_blocksize);
var ypos = parseInt(y / g_blocksize);
$("#checkedblock").html("checked block: " + xpos + " " + ypos);
if (g_levelarray[xpos][ypos] != undefined) {
return true;
}
else {
return false;
}
}
但该检查有一些错误,因为它将数字向下舍入,所以当我从顶部的一半击中一个块时(如下图所示),它允许玩家进入区域内。
the error i have http://userhome.org/test/error.png
我也尝试过Math.round而不是parseInt,但这只会让玩家陷入困境。
那么我怎样才能以正确的方式编写这段代码,以便我的播放器不会进入该块呢?
事先提前答案 0 :(得分:1)
而不是仅使用parseInt
和round
尝试使用范围。
取下限(Math.floor
)和上限Math.ceil
并通过检查数组中的这些值来检查该范围内是否存在该块。