所以我在运行两个不同操作系统的两台机器上试过这个,并且它们之间也发生了同样的事情。
#include <iostream>
#include <SDL2/SDL.h>
int main(int argc, char *argv[])
{
bool running = true;
SDL_Init( SDL_INIT_EVERYTHING);
SDL_Window* win = SDL_CreateWindow("test", 100, 100, 800, 600,
SDL_WINDOW_SHOWN);
SDL_Renderer* ren = SDL_CreateRenderer(win, -1, 0);
int r = 0;
while(running)
{
SDL_Event event;
SDL_PollEvent(&event);
switch(event.type)
{
case SDL_QUIT:
running = false;
break;
case SDL_KEYDOWN:
switch(event.key.keysym.sym)
{
case SDLK_d:
r++;
break;
case SDLK_RIGHT:
r++;
break;
}
break;
}
SDL_SetRenderDrawColor(ren, r, 255, 255, 255);
SDL_RenderClear(ren);
SDL_RenderPresent(ren);
}
SDL_DestroyRenderer(ren);
SDL_DestroyWindow(win);
SDL_Quit();
return 0;
}
当按住右箭头键时,它会闪烁,r增加得更快。
按住d时,它会慢慢增加。
为什么?
答案 0 :(得分:3)
SDL_PollEvent返回1;如果没有可用事件,则返回0。即使您没有理由,也无法检查返回状态并查看事件。您在这里找到的内容几乎未定义(很可能只是旧数据 - 一遍又一遍地读同一事件,即使它经常不会发生)。
在循环中完成正确的事件处理:
while(running) {
SDL_Event ev;
while(SDL_PollEvent(&ev)) {
// process event here
}
// draw here
}