碰撞检测/翻译错误

时间:2013-03-20 15:45:09

标签: opengl translation

当我的精灵与另一个形状碰撞时,我的精灵会消失,并在原来的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) { ... }

1 个答案:

答案 0 :(得分:0)

你在这里结了很多关系,可能没有你选择变量名的帮助。

x_Vely_Vel似乎实际上是位置,而不是速度。当您将这些内容提供给glTranslate()时,它只会将该转换添加到当前转换中。在你的情况下,它只是改变你的对象在屏幕上的位置。如果您的对象发生碰撞,那么您根本就不会进行翻译,因此当然会在不同的地方绘制内容。

显然将位置设置为零也不起作用,也不会否定它。

你需要做的是,单独留下glTranslate(),而不是在物体碰撞时不允许在给定方向上移动。更新位置时会发生这种情况。您正在尝试处理显示功能内部的碰撞,这不会起作用 - 此时您已经移动了对象,GL无法帮助您。

所以,不是我建议首先使用这样的OpenGL(此功能已弃用且效率低下),但如果您要使用glTranslate()等,请认识到它只是控制事物的绘制方式 - 它不处理运动。这是你的责任。