在过去的几天里,我一直在尝试实现使用 OpenGL 绘制的对象的简单碰撞检测。在我的帮助下,Pearson, Computer Graphics with OpenGL
我设法编写了以下函数:
void move(){
if(check_collision(sprite,platform1) || check_collision(sprite,platform2)){ //if colliding...
if (downKeyPressed ){ y_Vel += speed; downKeyPressed = false;} //going down
else if(upKeyPressed ){ y_Vel -= speed; upKeyPressed = false;} //going up
else if(rightKeyPressed){ x_Vel -= speed; rightKeyPressed = false;} //going right
else if(leftKeyPressed ){ x_Vel += speed; leftKeyPressed = false;} //going left
} // always glitches on whatever is last else if above?!?!
else{ glTranslatef(sprite.x+x_Vel, sprite.y+y_Vel, 0.0); }
}
我的精灵根据键盘输入(箭头键)移动。如果它与静止的物体碰撞,它会停止移动并保持在原来的位置。
到目前为止,它在与静止物体的顶部、左侧和底部发生碰撞时起作用。不幸的是(即使我使用相同的逻辑)右侧不起作用,并且在发生碰撞时,精灵会在其原始 x/y 坐标处重新绘制。我很困惑。
事实证明,move()
函数中的最后一次检查(最后一个else-if
)是那个不起作用的......我已经用 the 交换了left
,right
果然什么时候left
最后一个和播放向上 :(
关于如何改进这一点并阻止它出现故障的任何建议或想法?
请原谅我的天真和业余编码。我只是一个自学的开始。谢谢。