SDL键盘响应事件突然阻碍函数运行
用SDL写俄罗斯方块的时候,在自动下落中插入键盘响应事件函数,自动下落会中断。这是今天晚上发生的,今天上午还没事。我写了一个新函数后就这样了,后来把上午的代码完整的复制过...
用SDL写俄罗斯方块的时候,在自动下落中插入键盘响应事件函数,自动下落会中断。
这是今天晚上发生的,今天上午还没事。
我写了一个新函数后就这样了,后来把上午的代码完整的复制过来运行也不行了。求高手解答啊!!! 展开
这是今天晚上发生的,今天上午还没事。
我写了一个新函数后就这样了,后来把上午的代码完整的复制过来运行也不行了。求高手解答啊!!! 展开
展开全部
是用SDL_PollEvent(&ev)吗? 如果是SDL_WaitEvent在没有用户消息的时候会造成程序等待,从而影响到游戏的帧数,这样在有动画的游戏中,就会出现用户不操作的时候界面停止,当用户再次操作时,界面发生跳跃的情况 ..给个样本如下
int done=0;
while(done == 0)
{
SDL_Event event;
while ( SDL_PollEvent(&event) )
{
if ( event.type == SDL_QUIT ) { done = 1; }
if ( event.type == SDL_KEYDOWN )
{
if ( event.key.keysym.sym == SDLK_ESCAPE ) { done = 1; }
}
}
keys = SDL_GetKeyState(NULL);
if ( keys[SDLK_UP] ) { ypos -= 1; }
if ( keys[SDLK_DOWN] ) { ypos += 1; }
if ( keys[SDLK_LEFT] ) { xpos -= 1; }
if ( keys[SDLK_RIGHT] ) { xpos += 1; }
DrawScene();
}
我们不在事件轮询SDL_PollEvent中检查按键,因为事件轮询中是只有触发事件也即SDL_PollEvent(&event) == 1才能进入循环的,因而如果我们一直按下某键不放开是不会触发新的事件发生的
int done=0;
while(done == 0)
{
SDL_Event event;
while ( SDL_PollEvent(&event) )
{
if ( event.type == SDL_QUIT ) { done = 1; }
if ( event.type == SDL_KEYDOWN )
{
if ( event.key.keysym.sym == SDLK_ESCAPE ) { done = 1; }
}
}
keys = SDL_GetKeyState(NULL);
if ( keys[SDLK_UP] ) { ypos -= 1; }
if ( keys[SDLK_DOWN] ) { ypos += 1; }
if ( keys[SDLK_LEFT] ) { xpos -= 1; }
if ( keys[SDLK_RIGHT] ) { xpos += 1; }
DrawScene();
}
我们不在事件轮询SDL_PollEvent中检查按键,因为事件轮询中是只有触发事件也即SDL_PollEvent(&event) == 1才能进入循环的,因而如果我们一直按下某键不放开是不会触发新的事件发生的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询