如何处理GlutPostRedisplay?

沙塔伊·哈立德

我正在制作一个游戏,其中我的玩家是一个精灵,因为我在pressKeySpecial和releaseKeySpecial中写了“ GlutPostRedisplay”,所以按向右键或向上键(跳转并运行)会发生变化。之后,我做了一些动画,为此我制作了一个定时器函数(glutTimerFunc),该函数也使用GlutPostRedisplay。现在的问题是,当我按右键时,播放器会不断更改其精灵图像以在某个地方“运行”。我知道它的原因是因为我已经在计时器中设置了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();
}
拉比德76

如果没有输入,则必须重置模式。您需要类似的东西:

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 
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章