SDL Menübutton erzeugen
-
Hi,
Ich hab jetzt erst mit SDL angefangen. Ich will erstmal versuchen ein Menü zu machen. Ich wollte die einzelnen Button als Objekte programmieren, damit ich nicht jeden eintelnden neu programmieren muss. Das Problem ist, wenn ich ein Button im Programm erstelle stürtzt es ab:class Button{ private: SDL_Rect scr,btt; SDL_Rect *scr2,*btt2; SDL_Surface *screen,*button; int x,y; public: Button(SDL_Surface *screen2,int x,int y,SDL_Surface *btim){ screen=screen2; button=btim; scr.x=x; scr.y=y; scr.w=btim->w; scr.h=btim->h; btt.x=0; btt.y=0; btt.w=btim->w; btt.h=btim->h; *scr2=scr; *btt2=btt; } void DrawButton(){ SDL_BlitSurface(button,btt2,screen,scr2); } };Hoffe ihr könnt mir helfen.
-
Auf was zeigen die Pointer, die du dereferenzierst?
-
meinst du scr2 und btt2? Die zeigen auf scr und btt. SDL_BlitSurface benötigt pointer. Deswegen setzte ich einfach Pointer auf die Rechtecke. Das ist zwar umständlich aber es funktioniert und erfüllt seinen Zweck. Wär auch hier für eine bessere Lösung dankbar.
-
Mach bei BlitSurface:
SDL_BlitSurface(button,&btt,screen,&scr);So sparst du dir das umspeichern.
Kleiner Hinweis dazu am Rande, das zweite Rect wird von BlitSurface verändert (in deinem Fall scr2/scr), und zwar wird das Format (->w,->h) vom ersten übernommen.
Macht bei dir jetzt nicht viel aus, aber in die Falle bin ich auch schon getappt :>Was mir auffällt, dass du einerseits in deiner Klasse " int x,y;" hast, aber andererseits in deinem Konstruktor ebenfalls diese variablenbezeichnung verwendest:
"Button(SDL_Surface *screen2,int x,int y,SDL_Surface *btim)"Ich bin jetzt mit c++ auch nicht sooo gut, aber ich würde vermuten dass da vllt der Fehler liegt.
Schau beim debuggen mal ob er scr.x und scr.y richtige werte zuweist, und da nicht irgendein müll drinsteht (was dann beim blitsurface gut einen absturz verursachen würde)
-
Danke. Auch für die Tipps. Jetzt geht es.