检查值是否在某个数字的范围内
Check if value is within range of a certain number
我正在做一个游戏,玩家通过点击地图上的一个点来移动。然后,我使用一个函数来计算到点击点的角度,从而将它们发送到该点击点的轨迹上。
var angle = player.angleToPoint(new me.Vector2d(e.gameX, e.gameY));
player.vel.set(Math.cos(angle) * 2, -Math.sin(angle) * 2);
这行得通。
问题是,我希望玩家在到达该点击点后停止移动并更改为"站立"动画。点击点和播放器的位置以小数形式给出:
log(clickPointX + " , " + clickPointY + ", " +player.x + ", " + player.y) 给出:
2491.830945558739 , 627.4212034383954, 4894.160772981247, 813.5879189245883
在我的更新函数中,我想检查它是否相等,但速度增量大小永远不会允许它相等。如果我检查 <= 或>=,
if (player.x == clickPointX && player.y == clickPointY) {
player.vel.x = 0;
player.vel.y = 0;
player.setCurrentAnimation("stand");
}
else {
if (!player.isCurrentAnimation("walk")) {
player.setCurrentAnimation("walk");
}
}
这似乎行不通。有没有更好的方法来检查玩家是否已到达点击点位置?也许检查玩家的位置是否在点击位置的范围内?
当(在您的示例中)玩家一次移动 2 个像素时,您可以检查播放器是否在目标的 2 个像素范围内。如果精度对您很重要,那么您可能需要添加一些内容,以便玩家在下一步中移动到确切的像素位置(尽管由于浮点数的存储和操作方式,坐标仍然不太可能完全相同,而只是与最接近的整数相同)。
var xdist = player.x - clickPointx,
ydist = player.y - clickPointy,
sqDist = xdist * xdist + ydist * ydist;
if (sqDist >= .25 && sqDist < 4) { // close but not quite there
player.vel.x = -xdist; // cover the remaining distance in the next step
player.vel.y = -ydist;
} else if (sqDist < .25) { // close enough to stop
player.vel.x = 0;
player.vel.y = 0;
}
或者,使用 parseInt
检查整数坐标是否相同。
if (parseInt(player.x, 10) == parseInt(clickPointx, 10)
&& parseInt(player.y, 10) == parseInt(clickPointy, 10)) {
player.vel.x = 0;
player.vel.y = 0;
} else if(Math.pow(player.x - clickPointx, 2)
+ Math.pow(player.y - clickPointy, 2) < 4) {
player.vel.x = clickPointx - player.x;
player.vel.y = clickPointy - player.y;
}
您的玩家几乎永远不会准确地降落在点击点上,所以我会检查玩家 X 和点击 X 之间的差异,以及玩家 Y 和点击 Y 之间的差异是否都小于玩家移动的速度。因此,如果它是 X += 5 和 Y += 10,那么这些是您应该在邻近检查中使用的值。
当玩家在范围内时,您可以选择将他调整到点击点的确切位置,除非这对您的游戏无关紧要。
考虑将所有值包装在parseInt(val, 10)中。如果您在 HTML5 画布上绘图,十进制值可能会触发消除锯齿并导致图像模糊,这可能不是您想要的。
相关文章:
- 如何在JavaScript中使用此函数对范围内的所有数字求和
- JS:从数组中查找特定范围内的最低/最高数字
- 试图检查表单中的值是否为一个设定范围内的数字
- 检查数字是否在特定范围内
- 检查值是否在某个数字的范围内
- 数字在范围内的条件 - Titanium/Javascript
- 如何检查对象中的所有数字是否都在一定范围内
- Javascript - 在一定范围内生成随机数,不包括某些数字
- 增加Math.random中某个数字在一定范围内的机会
- 当数字在范围内时显示特定图像
- AngularJS中范围内的数字验证
- 如何获得 [0,1] 范围内的加密强数字
- 始终在 3K 数字范围内选择不同的数字
- 如何在任意范围内随机选择数字并使用 JavaScript 数组相加
- 检查字符串是否以范围内的数字开头
- Javascript验证-如何检查表单中输入的数字是否在一定范围内
- 将数字输入限制在范围内
- 检查数字范围内没有重复项的数字范围的最有效方法
- 检查数字是否在javascript范围内
- 在数字范围内查找空白