hi @ all,
ich bin noch ziemlich neu im SDL bereich bzw fange jetzt wieder an nach einer kleinen pause. Ich wollte mir jetzt mal eine Klasse schreiben für meinen Pong clone, der so ziemlich die wichtigsten Funktionen besitzt(bild laden, bewegen etc). Diese Klasse bzw diese cpp und hpp dateien wollte ich dann aber auch für vllt zukünftige spiele benutzen die ich versuche zu schreiben. Nunja bevor ich zu meinem Problem komme poste ich mal die Dateien meines Pongclones:
main.cpp:
|
C-/C++-Quelltext
|
1
2
3
4
5
|
#include <iostream>#include "CGame.hpp"#include "JawaiicaEngine.hpp"
using namespace std;
int main(int argc, char *args[]){ JawaiicaEngine Init; CGame TheGame;
Init.JawaiicaEngineInit (500, 500, 32, "JawaiicaEngine-Test"); TheGame.Init (); TheGame.Run (); TheGame.Quit ();
return 0;}
|
Game.hpp:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
|
#ifndef _CGAME_HPP_#define _CGAME_HPP_
#include "JawaiicaEngine.hpp"
class CGame{ public : CGame();
void Init (); void Run (); void Quit ();
private: bool GameIsRunning;
SDL_Event Event; SDL_Surface *background;
JawaiicaEngine Jawaiica;};
#endif
|
Game.cpp:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
|
#include "CGame.hpp"
CGame::CGame(){ background = NULL;}
void CGame::Init(){ GameIsRunning = true;}
void CGame::Run(){ while(GameIsRunning) { while(SDL_PollEvent(&Event)) { if(Event.type == SDL_QUIT) { GameIsRunning = false; } switch(Event.key.keysym.sym) { case SDLK_ESCAPE : GameIsRunning = false; break; }
} Jawaiica.LoadImage("Data/Background.bmp", background, 0, 0); }}
void CGame::Quit(){
}
|
JawaiicaEngine.hpp:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
|
#ifndef _JAWAIICA_ENGINE_HPP_#define _JAWAIICA_ENGINE_HPP_
#include <iostream>#include <SDL/SDL.h>#include <SDL/SDL_image.h>#include <SDL/SDL_ttf.h>
using namespace std;
class JawaiicaEngine{ public : JawaiicaEngine(); //Konstruktor
//Initialisiert das Bild void JawaiicaEngineInit(int xWindow, int yWindow, int Bpp, char *WindowName); //Ende der Initialisierung
//Lädt Bilder und setzt die Position fest void LoadImage(const string sFilename, SDL_Surface *Surface, int x, int y); bool FlipImage() { return SDL_Flip(buffer); } //Ende des Ladens
private: SDL_Rect Rect;
protected: SDL_Surface *buffer;};
#endif
|
JawaiicaEngine.cpp:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
|
#include "JawaiicaEngine.hpp"
JawaiicaEngine::JawaiicaEngine(){ buffer = NULL;}
void JawaiicaEngine::JawaiicaEngineInit(int xWindow, int yWindow, int Bpp, char *WindowName){ SDL_Init (SDL_INIT_EVERYTHING); buffer = SDL_SetVideoMode (xWindow, yWindow, Bpp, SDL_SWSURFACE | SDL_DOUBLEBUF); SDL_WM_SetCaption (WindowName, NULL);}
void JawaiicaEngine::LoadImage(const string sFilename, SDL_Surface *Surface, int x, int y){ Surface = IMG_Load(sFilename.c_str() );
Rect.x = x; Rect.y = y;
SDL_BlitSurface(Surface, NULL, buffer, &Rect);}
|
So, nun zu meinem Problem:
Wie oben schon gesagt, wollte ich die Dateien auch für zukünftige spiele benutzen. Deshalb wollte ich das initialisieren vom fenster etwas vereinfachen und gleich eine init funktion schreiben. Leider musste ich deswegen auch das buffer surface in der Klasse erstellen.
Wenn ich jetzt versuche, ein neues bild (zb background.bmp) in die Game.hpp hauptschleife zu tun dann geht noch alles gut. Füge ich dann SDL_Flip(buffer) hinzu wird buffer nicht erkannt weil das surface ja in einer anderen Klasse ist nicht in der Game klasse. Nunja deswegen wollte ich in der JawaiicaEngine.hpp ne funktion machen die ich dann in Game.hpp in der hauptschleife aufrufe.
Wenn ich jetzt das Spiel Starte, dann öffnet sich das fenster ist sofort wieder weg und es steht unten bei code::blocks: "Process terminated with status 3 (0 minutes, 0 seconds)"
wisst ihr vielleicht was ich falsch gemacht habe?
naja hoffentlich könnt ihr mir helfen!
MfG Jawaiica.