将 SDL_Window 传递给另一个 class
Passing SDL_Window to another class
我正在尝试将 SLD_Window *window 传递给另一个 class 以进行处理。
我不知道这是否是一种正确的编程方式,但我想尝试一下。
我正在 main.cpp 中创建一个 SDL_Window *Window,然后将指针 *Window 传递给另一个 class。
我发现所有 Renderer 函数在 window 中没有任何影响,但是当我将它们复制到 window.cpp 时屏幕是红色的。
看起来我传递了指针,但它创建了全新的 window。
我如何在 main class 中定义的同一个 window 上处理多个 classes?
之所以这样,是因为我想构建一个 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 Window(name);
SDL_Window *okno = Window.okno;
renderer = SDL_CreateRenderer(okno, -1, SDL_RENDERER_ACCELERATED);
我正在尝试将 SLD_Window *window 传递给另一个 class 以进行处理。 我不知道这是否是一种正确的编程方式,但我想尝试一下。 我正在 main.cpp 中创建一个 SDL_Window *Window,然后将指针 *Window 传递给另一个 class。 我发现所有 Renderer 函数在 window 中没有任何影响,但是当我将它们复制到 window.cpp 时屏幕是红色的。 看起来我传递了指针,但它创建了全新的 window。 我如何在 main class 中定义的同一个 window 上处理多个 classes? 之所以这样,是因为我想构建一个 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 Window(name);
SDL_Window *okno = Window.okno;
renderer = SDL_CreateRenderer(okno, -1, SDL_RENDERER_ACCELERATED);