SDL 2.0 Key repeat and delay

冷暖自知 提交于 2019-12-02 00:01:05

For game movement, you would typically not use events, but rather use states.

Try using SDL_GetKeyboardState() outside of the event loop:

const Uint8* keystates = SDL_GetKeyboardState(NULL);

...

if(keystates[SDL_SCANCODE_LEFT])
    player.moving = player.left;
else if(keystates[SDL_SCANCODE_RIGHT])
    player.moving = player.right;

simple as that

int vertical = 0;
int horizontal = 0;

float x = 500;
float y = 500;

float speed = 5.0;

in your sdl loop:

    if (SDL_PollEvent(&event))
    {
        switch (event.type)
        {
            case SDL_KEYDOWN:
            {
                switch (event.key.keysym.sym)
                {
                    case SDLK_LEFT:  horizontal=-1; break;
                    case SDLK_RIGHT: horizontal = 1; break;
                    case SDLK_UP:    vertical=-1; break;
                    case SDLK_DOWN:  vertical=+1; break;
                }
                break;
            }
            case SDL_KEYUP:
            {
                switch (event.key.keysym.sym)
                {
                case SDLK_LEFT:  horizontal = 0; break;
                case SDLK_RIGHT: horizontal = 0; break;
                case SDLK_UP:    vertical = 0; break;
                case SDLK_DOWN:  vertical = 0; break;
                }
                break;
            }
        }
    }
    x += horizontal * speed;
    y += vertical * speed;

Use the SDL_GetKeyboardState capturing outside of - while (SDL_PollEvent (&mainEvent)), that works fine.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!