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

时间:2013-05-04 20:25:10

标签: javascript jquery html5 canvas

我正试图制作一个小游戏,只是为了它的乐趣,我有一些碰撞问题。

我在画布上绘制了一个玩家,并在另一个画布上绘制了一些块(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,但这只会让玩家陷入困境。

那么我怎样才能以正确的方式编写这段代码,以便我的播放器不会进入该块呢?

事先提前

1 个答案:

答案 0 :(得分:1)

而不是仅使用parseIntround尝试使用范围。

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