簡體   English   中英

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;
    }

現在,在釋放UP或DOWN箭頭鍵后,釋放事件將永遠觸發,直到處理了其他任何事件為止。 我在這里做錯了什么?

您應該檢查SDL_PollEvent的返回值。 如果有要處理的事件,則返回1,否則返回0。 通常,您可以像這樣循環處理事件(從此處的文檔中復制):

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,您也正在處理事件。在這種情況下,事件對象保持不變,因此您一遍又一遍地處理最近的事件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM