如何处理GluPostRedisplay

How to handle GlutPostRedisplay?

本文关键字:GluPostRedisplay 处理 何处理      更新时间:2023-10-16

我正在制作一个游戏,在这个游戏中,我的玩家是一个精灵,当我按下向右键或向上键(跳跃和运行)时,它会发生变化,为此我在pressKeySpecial和releaseKeySpecial中写下了"GlutPostRedisplay"。之后,我做了一些动画,我制作了一个定时器函数(glutTimerFunc),也使用了GlutPostRedisplay。现在的问题是,当我按下右键时,我的玩家会不断地在某个地方更改其sprite图像以"运行"。我知道这是因为我在计时器中设置了GlutPostRedisplay,这样它就可以继续重新显示精灵,但如果我从计时器功能中删除了GlutPostRedisplay功能,那么其余的动画就会停止,只有在按键时才能工作。

我很困惑在哪里设置GlutPostRedisplay调用,这样我所有的动画和播放器都能正常工作?我也试过glutIdleFunc,但结果保持不变。

void pressKeySpecial(int key,int x,int y)
{
    switch (key)
    {
       case GLUT_KEY_LEFT:
       break;
       case GLUT_KEY_RIGHT:
                m.changePosition(10.0,0);
                m.changeMode(Mario::RUN);
                break; 
        case GLUT_KEY_UP:
            if(m.pos_Y<12) 
            {
                m.changePosition(0,9);
                m.changeMode(Mario::JUMP);
            }
            break;
    }
    glutPostRedisplay();
}
// TIMER 
void Timer(int value)
{
    t +=205;
    t1 +=705;
    down -=5;
    angle +=5;
    SplashTimer +=1;
    glutTimerFunc(30, Timer, 1);
   //glutIdleFunc(Timer);
   glutPostRedisplay();
}

如果没有输入,则必须重置模式。你需要这样的东西:

void pressKeySpecial(int key,int x,int y)
{
    switch (key)
    {
        case GLUT_KEY_LEFT:
            break;
        ...
        default:
            m.changeMode(Mario::STOP); // <- I used STOP because I don't know your default
            break; 
    }
    glutPostRedisplay();
}

void releaseKeySpecial( int key, int x, int y )
{
    m.changeMode(Mario::STOP); // <- I used STOP because I don't know your default 
}
相关文章:
  • 没有找到相关文章