SDL,为什么还有第二个屏幕

SDL, why is there a second screen?

本文关键字:第二个 屏幕 为什么 SDL      更新时间:2023-10-16

在学习了c++的基础知识后,我决定快速进入图形库。我已经开始阅读教程,然后,就在几个小时前,凭借我所学到的一切,我决定写一些代码,只需要制作一个窗口并在上面画一些东西

#include "SDL.h"
#include <stdlib.h>
class images
{
public:
    SDL_Window* OneW = NULL;
    SDL_Surface* Screensurface = NULL;
    SDL_Surface* dibujito = NULL;
    int width = 600;
    int height = 400;
bool init_sdl()
{
    bool success = true;
    if(SDL_Init(SDL_INIT_VIDEO) < 0)
    {
        success = false;
        SDL_GetError();
    }
    else
        OneW = SDL_CreateWindow("SDL File",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,width,height,SDL_WINDOW_SHOWN);
        if(OneW == NULL)
        {
            SDL_GetError();
        }
        else
        {
            Screensurface = SDL_GetWindowSurface(OneW);
        }
        return success;
}
bool loadmedia()
{
    bool success = true;
    dibujito = SDL_LoadBMP("Nazi.bmp");
    if(dibujito == NULL)
    {
        SDL_GetError();
    }
    return success;
}
void close()
{
    SDL_FreeSurface(dibujito);
    SDL_DestroyWindow(OneW);
    OneW = NULL;
    SDL_Quit();
}
};
int main(int argc, char* argv[])
{
    images project;
    project.init_sdl();
    if(!project.init_sdl())
    {
        SDL_GetError();
    }
    else
    {
        project.loadmedia();
    }
    if(!project.loadmedia())
    {
        SDL_GetError();
    }
    else
    {
        bool game_quit = false;
        SDL_Event e;
        while(!game_quit)
        {
            while(SDL_PollEvent(&e) != 0)
            {
                if(e.type == SDL_QUIT)
                {
                    game_quit = true;
                }
            }
            SDL_BlitSurface(project.dibujito,NULL,project.Screensurface,NULL);
            SDL_UpdateWindowSurface(project.OneW);
        }
    }
    project.close();
    return 0;
}

这个程序运行得很好,它做了我想要的,但后来我意识到了一些东西。这个程序创建了第二个窗口,第一个窗口是黑色的,有图像,但第二个只是白色的,空的。

为什么会出现第二个窗口?此外,每当我运行程序并单击X按钮(SDL_QUIT)时,窗口都不会关闭。为什么会发生这种情况?

在确保只调用project.init_sdl()一次之后,应该有一个窗口,并且当您像这样调用project.close()时,应用程序应该关闭。事件处理也应该起作用。

相关文章: