如何处理 GlutPostRedisplay?
How to handle GlutPostRedisplay?
我正在制作一个游戏,我的玩家是一个精灵,当我按下右键或向上键(跳跃和 运行 )时,我在 pressKeySpecial 和 releaseKeySpecial 中写了“GlutPostRedisplay” .之后我做了一些动画,为此我制作了一个定时器函数(glutTimerFunc),它也使用 GlutPostRedisplay。现在的问题是,当我按下右键时,我的播放器不断在某个地方更改 'run' 的精灵图像。我知道它是因为我在计时器中设置了 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
}
我正在制作一个游戏,我的玩家是一个精灵,当我按下右键或向上键(跳跃和 运行 )时,我在 pressKeySpecial 和 releaseKeySpecial 中写了“GlutPostRedisplay” .之后我做了一些动画,为此我制作了一个定时器函数(glutTimerFunc),它也使用 GlutPostRedisplay。现在的问题是,当我按下右键时,我的播放器不断在某个地方更改 'run' 的精灵图像。我知道它是因为我在计时器中设置了 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
}