C++ & SDL:SDL 事件无限重复
C++ & SDL: SDL event repeats endlessly
我有这段代码,它是一个简单的基于 SDL 的游戏的一部分:
SDL_PollEvent(&event);
switch (event.type){
case SDL_QUIT:
quit = true;
break;
case SDL_KEYDOWN: //Det här är för när en knapp trycks ner...
switch (event.key.keysym.sym){
case SDLK_RIGHT:
player1.x_vel = 5.5;
std::cout<<"OOOO\n";
break;
case SDLK_DOWN:
player2_sprite.src.x = 58;
break;
}
break;
case SDL_KEYUP: //Det här är för när en knapp släpps upp..
switch (event.key.keysym.sym){
case SDLK_UP:
std::cout<<"haaaaa\n";
if(player1.canJump){
player1.y_vel = -7.5;
player1.canJump = false;
}
break;
case SDLK_DOWN:
std::cout<<"BBBB\n";
player2_sprite.src.x = 0;
break;
}
break;
}
现在,在释放向上或向下箭头键时,释放事件会一直触发,直到处理任何其他事件。我在这里做错了什么?
您应该检查 SDL_PollEvent
的 return 值。 return如果有事件要处理则为 1,如果没有则为 0。通常,您会像这样循环处理事件(从文档 here 复制):
while (1) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
// handle your event here
}
// do some other stuff here -- draw your app, etc.
}
你的情况可能发生了什么,即使 SDL_PollEvent
returns 0,你仍在处理事件。在这种情况下,事件对象保持不变,所以你继续处理最多最近的事件一遍又一遍。
我有这段代码,它是一个简单的基于 SDL 的游戏的一部分:
SDL_PollEvent(&event);
switch (event.type){
case SDL_QUIT:
quit = true;
break;
case SDL_KEYDOWN: //Det här är för när en knapp trycks ner...
switch (event.key.keysym.sym){
case SDLK_RIGHT:
player1.x_vel = 5.5;
std::cout<<"OOOO\n";
break;
case SDLK_DOWN:
player2_sprite.src.x = 58;
break;
}
break;
case SDL_KEYUP: //Det här är för när en knapp släpps upp..
switch (event.key.keysym.sym){
case SDLK_UP:
std::cout<<"haaaaa\n";
if(player1.canJump){
player1.y_vel = -7.5;
player1.canJump = false;
}
break;
case SDLK_DOWN:
std::cout<<"BBBB\n";
player2_sprite.src.x = 0;
break;
}
break;
}
现在,在释放向上或向下箭头键时,释放事件会一直触发,直到处理任何其他事件。我在这里做错了什么?
您应该检查 SDL_PollEvent
的 return 值。 return如果有事件要处理则为 1,如果没有则为 0。通常,您会像这样循环处理事件(从文档 here 复制):
while (1) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
// handle your event here
}
// do some other stuff here -- draw your app, etc.
}
你的情况可能发生了什么,即使 SDL_PollEvent
returns 0,你仍在处理事件。在这种情况下,事件对象保持不变,所以你继续处理最多最近的事件一遍又一遍。