当我的精灵与另一个形状碰撞时,我的精灵会消失,并在原来的x / y位置重绘,我不确定为什么?
有人可以建议更改我的代码以阻止精灵消失,而是保持原始碰撞前的位置吗?
我已尝试撤消glTranslation
,并尝试将0
函数中的值设置为move()
以阻止它移动,但我没有成功。
void move(){
if(check_collision(sprite,platform1) || check_collision(sprite,platform2)){ //if colliding
//x_Vel = 0; y_Vel = 0;
}
else{ //if not colliding
glTranslatef(x_Vel, y_Vel, 0.0);
}
}
void drawSprite (RECT rect) { ... }
答案 0 :(得分:0)
你在这里结了很多关系,可能没有你选择变量名的帮助。
x_Vel
和y_Vel
似乎实际上是位置,而不是速度。当您将这些内容提供给glTranslate()
时,它只会将该转换添加到当前转换中。在你的情况下,它只是改变你的对象在屏幕上的位置。如果您的对象发生碰撞,那么您根本就不会进行翻译,因此当然会在不同的地方绘制内容。
显然将位置设置为零也不起作用,也不会否定它。
你需要做的是,单独留下glTranslate()
,而不是在物体碰撞时不允许在给定方向上移动。更新位置时会发生这种情况。您正在尝试处理显示功能内部的碰撞,这不会起作用 - 此时您已经移动了对象,GL无法帮助您。
所以,不是我建议首先使用这样的OpenGL
(此功能已弃用且效率低下),但如果您要使用glTranslate()
等,请认识到它只是控制事物的绘制方式 - 它不处理运动。这是你的责任。