将SDL_Window传递给另一个类

Passing SDL_Window to another class

本文关键字:另一个 SDL Window      更新时间:2023-10-16

我正试图将SLD_Window *窗口传递给另一个类来处理它。我不知道这是不是一种合适的编程方式,但我想尝试一下。我正在main.cpp中创建SDL_Window *Window,然后将指针*Window传递给另一个类。我发现所有的Renderer函数在window中没有任何影响,但是当我将它们复制到window.cpp时,屏幕是红色的。看起来我传递了指针,但它创建了一个全新的窗口。我怎么能在许多类工作在同一窗口,这是在主类定义?它是这样的,因为我想建立一个Draw.cpp,我将保留所有的绘图函数。

main.cpp

SDL_Window *WindowMain = NULL;
window Window(WindowMain , name);
renderer = SDL_CreateRenderer(WindowMain , -1, SDL_RENDERER_ACCELERATED);
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 100);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer)

window.h

    class window {
public:
    window(SDL_Window *Window, const char* Nazwa );
    virtual ~window();
private:
    SDL_Window *okno;
};

window.cpp

window::window(SDL_Window *Window, const char* Nazwa) {
    okno = Window;
    if(SDL_Init(SDL_INIT_VIDEO) !=0)
    {
        printf("Unable to initialize SDL due error: %s", SDL_GetError());
    }
    okno =  SDL_CreateWindow(Nazwa,
                    SDL_WINDOWPOS_CENTERED, // X position
                    SDL_WINDOWPOS_CENTERED, // Y position
                    800,    // Width
                    600,    // Height
                    SDL_WINDOW_SHOWN);
    if(okno == NULL){
        printf("Unable to create window due error: %s", SDL_GetError());
    }
}
window::~window() {
    SDL_DestroyWindow(okno);
    SDL_Quit();
}

主例程在本地声明okno:

SDL_Window *okno = NULL;
window Window(okno, name);   // `okno` is NULL and remains NULL
renderer = SDL_CreateRenderer(okno, -1, SDL_RENDERER_ACCELERATED);

在window.cpp中,你使用了一个名为okno的成员,一个全局变量,无论如何,但这不能是同一个变量。

window::window(SDL_Window *Window, const char* Nazwa) {
    okno = Window;
    if(SDL_Init(SDL_INIT_VIDEO) !=0)
    {
        printf("Unable to initialize SDL due error: %s", SDL_GetError());
    }
    okno =  SDL_CreateWindow(Nazwa,

两个okno变量具有完全不同的作用域,并且您不能像这样从window构造函数初始化okno

=> okno保持NULL在主级别=>你的SDL_CreateRenderer传递一个NULL窗口指针。

(更不用说设计真的很奇怪,命名也是…)

你可能想要的是:

window Window(name);
SDL_Window *okno = Window.okno;
renderer = SDL_CreateRenderer(okno, -1, SDL_RENDERER_ACCELERATED);
相关文章: