3

我正在尝试制作一个小游戏,只是为了好玩,但我遇到了一些碰撞问题。

我在画布上绘制了一个播放器,在另一个画布上绘制了一些块(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 但这只会在玩家中间造成问题。

那么我怎样才能以正确的方式编写此代码,以使我的播放器不会进入块?

提前谢谢

4

1 回答 1

1

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

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

于 2013-05-04T21:28:33.823 回答