2016-09-17 1 views
-2

Ich versuche, SLD_Window * Fenster an eine andere Klasse zu übergeben, um daran zu arbeiten. Ich weiß nicht, ob es eine richtige Art der Programmierung ist, aber ich würde das gerne ausprobieren. Ich erstelle ein SDL_Window * Window in main.cpp und übergebe dann das Zeiger * Window an eine andere Klasse. Ich habe herausgefunden, dass alle Renderer-Funktionen keine Auswirkung auf das Fenster haben, aber wenn ich sie in window.cpp kopierte, war der Bildschirm rot. Sieht so aus, als würde ich den Zeiger übergeben, aber es erzeugt ein komplett neues Fenster. Wie kann ich in vielen Klassen auf demselben Fenster arbeiten, das in der Hauptklasse definiert ist? Es ist so, weil ich Draw.cpp erstellen möchte, wo ich alle Zeichenfunktionen behalten würde.Übergabe von SDL_Window zu einer anderen Klasse

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(); 
} 
+0

Sie haben alle Art/Variablen Namenskonventionen verstoßen. Schwierig zu lesen ... –

+0

Das Problem ist, dass Sie erwarten, dass sich das Fenster, auf das der 'Window' Parameter zeigt, ändert, aber Sie tun eigentlich nichts damit. Sie haben anscheinend ein 'okno'-Feld in Ihrer' window' Klasse, aber wenn Sie dieses Feld auf einen anderen Wert setzen, wird das 'okno', das Sie in' main' deklariert haben, nicht geändert. Sie sollten wahrscheinlich einige grundlegende C++ - Kenntnisse auffrischen, bevor Sie eine vollständige Anwendung schreiben. – Cubic

Antwort

0

die Hauptroutine erklärt okno lokal:

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

In window.cpp verwenden Sie ein Element namens okno, eine globale, was auch immer, aber das kann nicht die gleiche Variable sein.

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, 

beiden okno Variablen haben insgesamt unterschiedlichen Umfang und Sie können okno vom window Konstruktor wie diese nicht initialisiert werden.

=>okno bleibt NULL auf main level => Ihre SDL_CreateRenderer ist ein NULL-Fensterzeiger übergeben.

(Nicht das Design zu erwähnen, wirklich seltsam ist, so dass die Namensgebung ist ...)

Was möchten Sie wahrscheinlich ist:

window Window(name); 
SDL_Window *okno = Window.okno; 
renderer = SDL_CreateRenderer(okno, -1, SDL_RENDERER_ACCELERATED); 
Verwandte Themen