Memberfunktion erstellen Glut & Opengl
-
Hallo,
ich esse gleich meinen Teppich

Ich "spiele" gerade etwas mit glut und opengl herum aber stehe da irgendwie vor einem riesigen Problem.
Ich habe eine Klasse:
class CPlayer{ private: float xpos; float ypos; public: void positionierung (float x, float y); void positionausgabe(); }; // C PLAYER Positionierung void CPlayer::positionierung (float x, float y){ xpos = x; ypos = y; } // C PLAYER Positionausgabe void CPlayer::positionausgabe(){ cout << "YPos:" << ypos << endl; cout << "XPos:" << xpos << endl; }In meiner Main Funktion erstelle ich nun den ersten Spieler
CPlayer Spieler1;soweit so gut... .
Nun versuche ich schon den halben Tag eine weitere Memberfunktion zu schreiben mit der es möglich ist den posx wert zu erhöhen.
Dazu brauche ich jaglutKeyboardFunc(handleKeypress);und
void handleKeypress(unsigned char key, int x, int y) { switch (key) { case 27: //Escape key exit(0); //Exit the program } }Mein versuche das ganze nun irgendwie in eine Memberfuntion zu bekommen sind bislang kläglich gescheitert.
Wie gehe ich bei so etwas richtig vor ?
Vielen Dank
Askar
// Edit: Codetags
-
1. Bitte benutze cpp-Tags. Das kann man so kaum lesen.
2. Wäre es ev. angebrachter das in einem anderen Forum zu posten, da ich aber nicht so recht weiss, was dein Problem ist.
class CPlayer{ private: float xpos; float ypos; public: void positionierung (float x, float y); void positionausgabe(); void increase_xposition () {xpos++;} void increase_yposition () {ypos++;} };Ist es das, was du willst?
Hmm. Ich glaube ich weiss jetzt, was dein Problem ist..
Du willst per Tastendruck dein Objekt (CPlayer bewegen)?Nun. Da musst du zuerst einmal die Schnittstelle zu dem Player erstellen. Was so viel bedeutet, wie schauen, dass du das Objekt von aussen verändern kannst. (ist jetzt mittels positionierung und increase_x/yposition() möglich.)
OK. Nun kommt der andere Teil. Du musst die Eingabe zu dem Objekt weiterleiten.
Das regelst du aber an einem anderen Ort. Wenn das ganze ein Spiel ist, dann verwaltet z.B CGame oder sonst etwas die ganzen Objekte. Und somit auch die Eingabe. Die Eingab kannst du dann an das Objekt, das du erreichen willst weiterleiten.class CGame { public: ... void doInput ( unsigned char key, int x, int y ) { switch (key) { case (nur_who_represent_left): player.increase_xposition (); break; ... } } //Mache ein Singleton daraus static CGame& instance () {static CGame inst; return inst;} ... private: CGame (){} CGame ( CGame & ); CGame & operator = ( CGame & const ); CPlayer player; .... }; void handleKeypress(unsigned char key, int x, int y) { CGame::instance().doInput (key,x,y); }Wo ich mal annehme, dass dein Problem lag, ist, dass du eine Funktion haben musst, die aufgerufen wird, wenn eine Eingabe gemacht wurde. (handleKeypress) und du das aber in einer Klasse haben willst. Das kannst du ganz einfach machen, indem du die Informationen einfach weiterleitest. Dafür musst du aber auch noch wissen zu welchem Objekt das weitergeleitet werden soll. Das musst du dann aber in einem anderne Kontext lösen, oder du machst einfach ein Singleton draus (nur ein Objekt möglich/sinnvoll). (Wegen des Singletons ist auch der c'tor/copy-c'tor privat, aber das ist ein anderes Thema.
)
-
Vielen Dank
!Das mit dem Information weitergeben hat den Knoten in meinem Kopf platzen lassen
!