erster versuch in OpenGL ein Spiel zu basteln!, brauche hilfe...
-
hallo,
ich versuche gerade in openGL mal nen kleines spielchen zu baun (spaceWar 2D). meine probleme die ich festgestellt habe liegen darin, die schuesse vom raumschiff auf der bahn gerade aus zu schiessen wo das raumschiff geschossen hat.ich dachte mir folgendes. ich deklariere variablen mit der position des schiffs. des is nen GL_QUADS mit ner Bmp druff. und nun will ich wenn ich space druecke das dort ein schuss abgefeuert wird und gerade aus fliegt. also habe ich ne hilfs variable initialisiert die die schiff koordinate speichert( y kord. ) das prob is ich arbeite mit static und die variablen werden immer neu durch glLoadIdentity() gelöscht und neu geshcrieben. das hat zur folge das sich der schuss nicht auf der bahn gerade aus bewegt sonder mit dem schiff die pos. aendert... hmmm!, was kann ich da machen?, noch eine sache habe ich hier...ich moechte das solange die space taste gedrueckt ist die schuesse abgeballert werden.... das wollte ich so machen:
if( keys[ VK_SPACE ] ) { shot = true }void Shoots( float &xPos, float &yPos ) { float yshot; yshot = yPosF; if( shot ) { glTranslatef( xPosS, yshot, -10.0f ); glBindTexture( GL_TEXTURE_2D, texture[1] ); glBegin( GL_QUADS ); glTexCoord2f( 0.0f, 0.0f ); glVertex2d( -2.4f, yPos + 0.05f ); glTexCoord2f( 1.0f, 0.0f ); glVertex2d( -2.2f, yPos + 0.05f ); glTexCoord2f( 1.0f, 1.0f ); glVertex2d( -2.2f, yPos - 0.05f ); glTexCoord2f( 0.0f, 1.0f ); glVertex2d( -2.4f, yPos - 0.05f ); glEnd(); glLoadIdentity(); while( !( xPosS > 1.0f ) ) { ++xPosS; glLoadIdentity(); } } }hmm geht auch irgendwie net... ich moechte das die schuesse die vom schiff kommen und nach vorne fliegen zusehen sind... ich dachte man koennte des mit Sleep(...) lösen geht aber net, da wird eher die zeit gewarten und dann tauchte der schuss kurz auf und is weg...
waer nett wenn ihr mir helft, thanx
-
Vergiss diesen Ansatz!
Du musst Geschosse genau wie Raumschiffe etc. als Objekte behandeln, die sich in jedem Frame weiterbewegen und dann an ihrer momentanen Position gezeichnet werden.
-
hmm.... und wie macht man sowas? mit structuren klassen ?? kann mir jemand nen ansatz zeigen_
-
Machst halt ne eigene Klasse für einen Schuss mit einer x, y Koordinate und dem Richtungswinkel. Wenn du schießt, wird halt en neues Objekt davon angelegt. Und jeden Frame gehst du alle "aktiven" Schüsse durch und berechnest mit sin/cos die neue Koordinate.
-
Du kannst eine Klasse Spielobjekt machen, die z.B. Attribute wie Position, Geschwindigkeit, Masse etc. und virtuelle Methoden zum Bewegen, Zeichen, Kollisionsabfrage etc. besitzt, und davon kannst du dann Klassen für Raumschiffe und Geschosse ableiten.
Die Objekte speicherst du dann z.B. mit einer Liste (std::list<Spielobjekt*>).
-

