可能重复:
浮点比较
嗯,这是一个奇怪的。通常以下if( 4.0 == 4.0 ){return true}
将始终返回true
。在我拥有的一个简单的 opengl 3d '射手'程序中,当我尝试添加'跳跃'效果时,情况并非如此。
这个想法相当简单,我有一个三角形地带的地形,当“角色”移动/行走时,你会沿着二维高度阵列移动,因此你会在山丘/低谷的不同高度上下行走。
在drawScene()
函数之外(或者如果你知道 opengl,the glutDisplayFunc()
),我有一个update()
函数可以在角色“跳跃”时上下提升角色,这被称为 in drawScene()
。换句话说,尽我所能解释的高级,跳跃算法如下:
参数:
double currentJumpingHeight
double maximumJumpingHeight = 4.0
double ypos;
const double jumpingIncrement = 0.1; //THE PROBLEM!!!! HAS TO BE A MULTIPLE OF 0.5!!
bool isJumping = false;
bool ascending = true;
算法:
(when space is pressed) isJumping = true.
if ascending = true and isJumping = true,
currentJumpHeight += jumpingIncrement (and the same for ypos)
if currentJumpingHeight == maximumJumpingHeight, //THE PROBLEM
ascending = false
(we decrement currentJumpingHeight and start to fall until we hit the ground.)
它非常简单,但只有当 jumpingIncrement 是0.5
!!
如果jumpingIncrement
是,比如说,,0.1
那么currentJumpingHeight
永远不会等于maximumJumpingHeight
。角色像火箭一样起飞,永远不会回到地面。即使两个变量打印到标准输出并且相同,条件也永远不会为真。这是我想解决的问题,很荒谬。
我不想要关于跳跃算法的任何反馈——请只看上面的段落。
请帮忙。