1

当我的精灵与另一个形状碰撞时,我的精灵消失并在其原始 x/y 位置重新绘制,我不确定为什么?

任何人都可以建议更改我的代码以阻止精灵消失,而是保持初始碰撞之前的位置吗?

我已经尝试反转glTranslation并尝试0move()函数中设置值以阻止它移动,但我没有成功。

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) { ... }
4

1 回答 1

0

您在这里有点纠结,您选择的变量名可能无济于事。

x_Vel并且y_Vel看起来实际上是位置,而不是速度。当您将这些提供给它时​​,glTranslate()它只需将该翻译添加到当前转换中。在你的情况下,它只是改变你的对象在屏幕上的绘制位置。如果您的对象发生碰撞,则您根本没有进行翻译,因此当然会将事物绘制在不同的位置。

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

您需要做的就是不要glTranslate()理会,而是在物体碰撞时不允许在给定方向上移动。这应该在您更新职位时发生。您正在尝试处理显示功能内部的碰撞,但这是行不通的——此时您已经移动了对象,GL 无法帮助您。

所以,并不是我OpenGL首先推荐这样使用(这个功能已被弃用,而且效率低下),但如果你要使用glTranslate()等,请意识到它只不过是控制事物的绘制方式 - 它确实不处理运动。那是你的责任。

于 2013-03-20T17:30:15.563 回答