我正在尝试制作一个小游戏,只是为了好玩,但我遇到了一些碰撞问题。
我在画布上绘制了一个播放器,在另一个画布上绘制了一些块(16 x 16px)。
但是我在检测水平碰撞时遇到了问题。
...
我的问题归结为:
我的播放器使用存储为的 xy 坐标:
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;
}
}
但该检查有一些错误,因为它会将数字四舍五入,所以当我从顶部的一半击中一个块时(如下图所示),它允许玩家进入块内。
(来源:userhome.org)
我也尝试过 Math.round 而不是 parseInt 但这只会在玩家中间造成问题。
那么我怎样才能以正确的方式编写此代码,以使我的播放器不会进入块?
提前谢谢