c++ - 尝试在玩家死亡时切换纹理(OpenGL + C++)

标签 c++ opengl textures texture-mapping

我正在创建一个 2D 游戏,当玩家死亡时,我希望纹理切换到另一个(以显示爆炸),我还希望游戏暂停一两秒,以便用户可以看到纹理已改变。

我的纹理加载正确,因为我可以将它应用到一个形状,如果我说用玩家的原始纹理切换它,我就可以看到它。

我认为一定是它只在一帧中渲染然后消失或类似的情况。这是代码。

void Player::die(){
if(Player::lives > 0){

    glPushMatrix();
    glEnable(GL_TEXTURE_2D);    
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glBindTexture(GL_TEXTURE_2D, explosionTex);
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

    glTranslatef(200, 200, 0.0);
    glRotatef(heading, 0,0,1);
    glColor3f(1.0,0.0,0.0);
        glBegin(GL_POLYGON);
            glTexCoord2f(0.0, 1.0); glVertex2f(-40,40);
            glTexCoord2f(0.0, 0.0); glVertex2f(-40,-40);
            glTexCoord2f(1.0, 0.0); glVertex2f(40,-40);
            glTexCoord2f(1.0, 1.0); glVertex2f(40,40);
        glEnd();


    glDisable(GL_BLEND);
    glDisable(GL_TEXTURE_2D);
    glPopMatrix();

    Sleep ( 1000 );

    *xscroll = 0;
    *yscroll = 0;
    Player::lives--;
    Player::XPos = 0;
    Player::YPos = 0;
    Player::heading = 0;
    Player::speed = 0;
}
}

如何让它切换纹理、显示纹理然后休眠一段时间?

最佳答案

如果你想看到任何东西,你需要在 Sleep() 之前交换缓冲区。

更一般地说,将 Sleep() 替换为 ExplodeStart,并将其设置为 CurrentTimeInMilliseconds()。然后每次通过渲染循环检查 CurrentTimeInMilliseconds()-ExplodeStart 是否 > 1000。如果是,请再次切换到常规播放器纹理。

关于c++ - 尝试在玩家死亡时切换纹理(OpenGL + C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2418588/

相关文章:

c++ - 如何删除 QStringList 中的冗余元素

opengl - GLSDK 打破了 easylogging++

python - 纹理绘制的形状 - python pygame

optimization - GLSL-是否优化了纹理查找?

OpenGL:将图像加载到纹理数组中

c++ - 调用具有意外结果的默认构造函数

c++ - 如何限制cin中的输入时间限制?

c++ - 创建具有有限参数的 std::function 类型

iphone - 如何在iPhone上实现全场景抗锯齿

c++ - 从另一个类调用时类中的方法出现问题