我在一个正在开发的游戏中使用Mathhelper.Clamp时遇到了一个问题。下面是给我带来问题的代码片段:
if (background.position.Y == 0)
{
player.position.Y = MathHelper.Clamp(player.position.Y, 0, viewport.Height / 2);
}
if (Math.Abs(background.position.Y) == background.sprite.Height - viewport.Height / 2)
{
player.position.Y = MathHelper.Clamp(player.position.Y, viewport.Height / 2, viewport.Height - player.sprite.Height);
}
if (player.position.Y == viewport.Height / 2)
{
background.position.Y = MathHelper.Clamp(background.position.Y, -(background.sprite.Height - viewport.Height / 2), 0);
}基本上,我希望完成的是(从x,0开始)让玩家精灵向下移动,直到它到达屏幕的中间,然后背景将会移动,直到它到达背景的底部减去屏幕高度的一半,然后玩家精灵将再次移动,直到它到达屏幕的底部。(我有实现这一点的代码)-对我来说,这似乎是一个非常典型的2D侧滑相机功能。
然而,我遇到的问题是,这些位置并没有精确地固定在它们应该是的数字上,这意味着依赖于它们被如此明确地放置的代码也在崩溃。更具体地说,它看起来像是一个额外的帧价值的运动是允许超出夹点。
有没有人能告诉我这是不是有原因,或者我能做些什么来让它工作?提前感谢!
发布于 2012-01-31 18:21:29
要比较浮点数,永远不要使用==,因为这几乎总是错误的。由于浮点数的精度有限,因此您应该始终查看它们之间的差异是否小于给定的epsilon。
如下所示:
// Difference less than one tenthousandth should be considered equal
private const float Epsilon = 0.0001;
public static bool FloatEquals(float f1, float f2)
{
return Math.Abs(f1 - f2) < Epsilon;
}发布于 2012-02-01 05:35:58
我意识到我做错了什么,让玩家的位置移动到我的夹子的边界之外……我把夹子代码放在移动代码之前。重新排列它们就清楚了这一点!
https://stackoverflow.com/questions/9077737
复制相似问题