我正在创建一个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;
}
}
如何让它切换纹理,显示然后再睡一段时间?
答案 0 :(得分:4)
如果你想看到任何东西,你需要在Sleep()之前交换你的缓冲区。
更一般地说,将Sleep()替换为ExplodeStart,将其设置为CurrentTimeInMilliseconds()。然后每次通过渲染循环检查CurrentTimeInMilliseconds() - ExplodeStart> 1000.如果是,请再次切换到常规播放器纹理。