Javascript 我的播放器与2d阵列中的块之间的碰撞检测
我试着做一个小游戏只是为了好玩,我有一些碰撞问题 我在画布上绘制了一个播放器,在另一个画布上绘制了一些块(16 x 16px) 但是我在检测水平碰撞时遇到了一个问题 我的问题归结为: 我的播放器使用x y坐标,该坐标存储为: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; 表示将在画布左侧绘制块:
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
元素。