2017-02-21 3 views
-1

Also habe ich drei Klassen Application, DrawMgr und Cube. In Application.cpp ist meine Hauptschleife, in der ich DrawMgr :: DrawCube rufe, in der ich Cube :: Draw rufe.Zeichnen von SDL_Surface aus einer anderen Klasse

Application.cpp

while (!quit) 
{ 
    //Draw Background 
    gDrawMgr.DrawBackground(); 

    gDrawMgr.DrawCube(); 

    //UpdateScreen 
    gDrawMgr.UpdateScreen(); 

    //Handle events on queue 
    while (SDL_PollEvent(&e) != 0) 
    { 
     //User requests quit 
     if (e.type == SDL_QUIT || e.key.keysym.sym == SDLK_ESCAPE) 
     { 
      quit = true; 
     } 
    } 
} 

DrawMgr.cpp

SDL_Surface* screenSurface; 

void DrawMgr::DrawCube() 
{ 
    gCube.Draw(screenSurface); 
} 

Cube.cpp

void Cube::Draw(SDL_Surface* destination) 
{ 
    SDL_Rect offset; 
    offset.x = 100; 
    offset.y = 100; 

    SDL_FillRect(cube, NULL, SDL_MapRGB(cube->format, 0, 0, 0)); 

    SDL_BlitSurface(cube, NULL, destination, &offset); 
} 

Wenn ich das Programm ausführen, wird der Würfel nicht erscheinen, was bin ich falsch machen?

+0

So sagen Sie dies so lange funktioniert, wie Sie teilen sich nicht Ihren Code in drei verschiedenen Klassen? – Martin

+0

Ja, tut es. Ich sollte wohl erwähnen, dass gCube und gDrawMgr Objekte sind, die ich global mit extern verwende. –

+0

Wo schreibt man eigentlich auf den Bildschirm, 'Cube :: Draw' zeichnet auf die Oberfläche' screenSurface'. 'SDL_Flip' ist dann erforderlich, um in den Anzeigepuffer zu zeichnen. –

Antwort

0

Sind Sie sicher, dass Sie SDL2.0 verwenden? Da sich die Dinge geändert haben, benötigen Sie einen SDL_Renderer und ein SDL_Texture. Scheint so, als ob du es auf SDL-1-Weise machen willst.

In SDL2, um den Bildschirm zu aktualisieren, verwenden wir diese Anrufe

SDL_RenderClear (sdlRenderer);

SDL_RenderCopy (sdlRenderer, sdlTexture, NULL, NULL);

SDL_RenderPresent (sdlRenderer);

RenderClear zum Löschen des Bildschirminhalts. RenderCopy, um eine Textur darauf zu zeichnen. RenderPresent, um das Endergebnis auf dem Bildschirm zu zeichnen.

Weitere Informationen zum neuen Fluss finden Sie im Migrationsleitfaden.

https://wiki.libsdl.org/MigrationGuide

+0

Es ist immer noch möglich auf der Fensteroberfläche zu blitschen, wenn man wirklich will. – keltar

+0

@keltar Sie können, aber Sie werden eine bessere FPS mit SDL_Texture und diese Render-Aufrufe haben. – jordsti

+0

Es kommt darauf an. Aber egal, mein Punkt war, dass in Frage stehender Code SDL2 völlig gültig sein könnte, selbst wenn es für manche Leute "nicht 2 genug" aussehen könnte. – keltar

Verwandte Themen