C ++& SDL:SDL事件无休止地重复

时间:2015-01-09 00:26:05

标签: c++ event-handling sdl

我有这个代码,它是简单的基于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;
    }

现在,在释放向上或向下箭头键时,释放事件将一直持续触发,直到处理完任何其他事件。我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

您应该检查SDL_PollEvent的返回值。如果有要处理的事件,则返回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返回0,您也正在处理事件。在这种情况下,事件对象不会被修改,因此您将一遍又一遍地处理最近的事件。 / p>