Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

18.02.2012, 00:44

Surface aus einem Rect erstellen

Hallo!

Was mache ich falsch?

Quellcode

1
2
3
4
5
6
7
SDL_Surface* Temp = NULL;
SDL_Surface* Menu = NULL;

    Temp = SDL_CreateRGBSurface(SDL_SWSURFACE, W, H, 32, 0xff, 0xff, 0xff, 0);
    Menu = SDL_DisplayFormat(Temp);

    SDL_FreeSurface(Temp);


Hier erstelle ich mir mein Surface... und übergebe es in eine andere Klasse (nicht durcheinander kommen, in jeder Klasse heißt das fertige Surface Menu):

Quellcode

1
SDL_BlitSurface(it->GetMenuInstanceSprite(), NULL, Menu, it->GetMenuInstanceOffset());


Im Offset vom ersten erstellten "Menu" steht: x=0, y=0, w=20, h=20... ansonsten übergebe ich dort nur noch das besagte Sprite "Menu" von ganz oben.

Problem: Er zeichnet einfach garnichts. Ich vermute, weil ich das zweite Menu nicht richtig initialisiert habe oder was auch immer... Beim Zweiten habe ich einfach nur SDL_Surface* Menu = NULL; geschrieben.

Wäre über jede Hilfe dankbar.
MfG Clark

storage

Treue Seele

Beiträge: 138

Wohnort: Bad Salzungen

  • Private Nachricht senden

2

18.02.2012, 12:26

Also ich kenne mich mit der SDL kaum aus, aber du nutzt Pointer, das heisst du hast im Menü einen Zeiger auf ein Object was aus Temp erzeugt wird und soweit ich weiß macht SDL_FreeSurface so etwas wie

C-/C++-Quelltext

1
2
delete (Temp);
Temp = NULL;


Das heisst deine Rect existiert nicht mehr. Probiere mal "SDL_FreeSurface" erst im Destruktor oder beim schließen des Programms freizugeben.
Ich bin wie gesagt kein Profi ist nur eine Vermutung.

3

18.02.2012, 13:48

hi, an SDL_FreeSurface() liegt das mmn nicht, denn SDL_DisplayFormat() erzeugt ja eine nagel neue surface (mit neuer adresse),
also Temp und Menu zeigen auf unterschiedliche objekte.
versteh ich aber nicht was Menu da anzeigen soll, da ist doch nur ne leere surface drin,oder wie?

4

18.02.2012, 22:21

Meine Idee war, lauter kleiner Menus zu erstellen, die jeweils ein SDL_Surface haben und diese Surfaces will ich auf ein zusammenfassendes einziges großes Surface bringen. So dass ich nur noch das rendern muss.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

5

18.02.2012, 22:50

Wenn du dir eine GUI erstellen möchtest, dann guck doch mal bei Google. Da gibt es viele Ansätze wie man das schön umsetzen kann. Ansonsten wurd ja schon gesagt, dass Temp freigegeben wird und dein Surface ansonsten auch einfach leer ist. Vielleicht benötigen wir aber auch einfach mehr Code um zu wissen was los ist. Ansonsten schreib noch mal genauer was dein Problem ist. Ich bin mir bei der SDL nicht sicher, aber wenn der Zeiger invalide wäre, würde vermutlich ein Fehler kommen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige