SDL_PollEvent不起作用

时间:2015-01-26 23:25:16

标签: c++ event-handling sdl

我在游戏开发中做了关于SDL的本教程。程序应该在找到输入时离开主循环,但它不会:

SDL_Window* gWindow = NULL;
SDL_Surface* gScreenSurface = NULL;
SDL_Surface* gXOut = NULL;

int main(int argc, char* argv[]) {

    if (!init()){
        printf("Failed to initialize.\n");
    }
    else {
        //Load media
        if (!loadMedia()){
            printf("Failed to load media.\n");
        }
        else {
            //Main loop flag
            bool quit = false;

            //Event handler
            SDL_Event e;

            //While application is runnig
            while (!quit){
                //Handles events on queue
                while (SDL_PollEvent(&e) != 0){
                    //User requests quit
                    if (e.type == SDL_QUIT){
                        quit = true;
                    }
                }

                //Aply the image
                SDL_BlitSurface(gXOut, NULL, gScreenSurface, NULL);

                //Update the surface
                SDL_UpdateWindowSurface(gWindow);

            }
        }
    }

    //Free resources and close SDL
    close();

    return 0;

我已尝试将SDL_QUIT更改为SDL_KEYPRESSED,但它也无法正常工作。知道为什么吗?

2 个答案:

答案 0 :(得分:0)

SDL2中不存在SDL_KEYPRESSED。如果要使用键盘输入退出程序,请在循环中使用SDL_KEYDOWN或SDL_KEYUP,如下所示:

while (SDL_PollEvent(&e) != 0){

    if (e.type == SDL_KEYDOWN){  // or SDL_KEYUP
       quit = true;
    }

请查看wiki page

答案 1 :(得分:0)

这是代码查找您要实现的目标的方式:

Error using  * 
Integers can only be combined with integers of the same class, or scalar doubles.

Error in main_pzm (line 44)
                Pzm = Pzm+rad*psi;

当按下窗口上的X时,SDL_QUIT接受输入,或者如果要在应用程序中使用其他键退出,则将键更改为其他键。