Javascript 我的播放器与2d阵列中的块之间的碰撞检测

Javascript 我的播放器与2d阵列中的块之间的碰撞检测,javascript,jquery,html,canvas,Javascript,Jquery,Html,Canvas,我试着做一个小游戏只是为了好玩,我有一些碰撞问题 我在画布上绘制了一个播放器,在另一个画布上绘制了一些块(16 x 16px) 但是我在检测水平碰撞时遇到了一个问题 我的问题归结为: 我的播放器使用x y坐标,该坐标存储为: var p_x; var p_y; 这些值是以像素为单位的左下角坐标 但我的块位于一个二维数组中,称为: var g_levelarray; 每个块是16 x 16 px,例如,如果我这样做: g_levelarray[3][2] = 1; 表示将在画布左侧绘制块:

我试着做一个小游戏只是为了好玩,我有一些碰撞问题

我在画布上绘制了一个播放器,在另一个画布上绘制了一些块(16 x 16px)

但是我在检测水平碰撞时遇到了一个问题

我的问题归结为:

我的播放器使用x y坐标,该坐标存储为:

var p_x; var p_y;
这些值是以像素为单位的左下角坐标

但我的块位于一个二维数组中,称为:

var g_levelarray;
每个块是16 x 16 px,例如,如果我这样做:

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;
    }
}
但该检查有一些错误,因为它将数字向下舍入,所以当我从顶部的一半击中一个方块时(如下图所示),它允许玩家进入方块内部

我也尝试过Math.round而不是parseInt,但这只会在玩家中间产生问题

那么,我如何才能以正确的方式编写代码,使我的播放器不会陷入阻塞


提前thx

不要只使用
parseInt
round
尝试使用范围


取下限(
Math.floor
)和上限
Math.ceil
,通过检查数组中的这些值来检查块是否存在于该范围内。

如果
g_levelarray[xpos][ypos]
表示字符串,那么
索引()中的内容是什么
method n你的代码?我想我一开始误解了你,但我明白你的意思。代码索引错误。它应该是indexOf('t')=-1。哈哈。但还是没有问题:)但我现在刚刚删除了它。
返回g_levelarray[xpos][ypos]!=未定义的
会更干净。我在代码中注意到,如果
xpos
不在数组中,那么
g_levelarray[xpos]
也将是未定义的,因此
g_levelarray[xpos][ypos]
尝试访问本身未定义的对象的元素。因此,您可以检查数组中是否存在
xpos
元素。