C++ Wo kommt die Spielelogik in Opengl(GLUT) / C++ hin?

F

Furtano

Gast
Ich programmiere Schiffe versenken in OpenGL (GLUT) und C + +.

Ich weiß was ich tun muss um den Grafik-Stuff anzuzeigen (wie die Anzeige des Feldes und vordefinierte Schiffe), aber wo muss ich meinen Spiel-Code, wie:

- wenn die Taste gedrückt wurde soll der Auswahl-Cube ein Feld nach links wandern
- wenn ein Schiff platziert zeigt wird dann zeige das Schiff

Dinge wie ein Schuff zu platzieren (Auswahl zwischen den Feldern) kann ich in der display()-Funktion machen, aber wenn ein Schiff gelegt wird, muss in der display ()-Funktion erstellt werden, oder?

Ich weiß nicht, wo die Spielelogik hinkommt.
Sie soll ja nicht dauernd aufgerufen werden wie in der display()-Funktion aber sie soll auch was darstellen können.

Danke :)
 
Du erstellt dir eine funktion so wie

void keyprocessing(int key, int x, int y)
{
switch(key)
{
case GLUT_KEY_F1: // do something;
break;
}
}

und glut selber hat eine funktion glutKeyboardFunc(keyprocessing);

Google ist uebrigens sehr hilfreich was GLUT angeht, auch die GLUT dokumentation. Fuer den rest um ein "Schuff" zu platzieren, musst du halt routinen erstellen, die das verarbeiten koennen. Das macht man nicht einfach mal so, das dauert halt ein bischen. Denk mal ein bischen nach, wie du das am besten machen koenntest, probier ein bischen rum und irgendwann kannst du dann verschiedene Sachen miteinander kombinieren um das beste fuer dein Spiel rauszufinden
 
Es gibt sowas wie einen GameLoop der meistens zeitgesteuert ist. Ums mal einfach zu machen koennte der wie folgt aussehen:
Code:
while(gameIsRunning) {
    doGameLogic();

    renderGame();
}

Das ist natuerlich stark vereinfacht aber so sieht in vielen Spielen aus. In GameLogic faengst du dann Events ab und oder berechnets Position von Objekten. Wobei man Input und die eigentliche Spiellogik auch noch trennen sollte.

renderGame ist in deinem Fall also die display-Methode. Diese sollte aber nicht bei jedem Durchlauf der Schleife aufgerufen sondern 30-60x pro Sekunde. Das schont die Ressourcen :)

Generell solltest du zum Thema GameLoop jede Menge bei Google finden.
 
@toxn:
In Glut wird die Rendermethode automatisch 60mal pro Sekunde aufgerufen. Das ist also schon etwas praktischer für ein kleines Spiel als das selbst zu implementieren.

Man könnte das Ganze aber natürlich auch von Hand machen und eben die GameLogik-Funktion alle 10 Millisekunden aufrufen. Da ist es aber nicht besonders performant in einer Schleife zu warten bis genügend Zeit vergangen ist. Das wird die CPU ziemlich aufheizen. Ein Thread wäre hier sicherlich sinnvoll.

Zu Anfang ist es aber vielleicht einfacher erstmal in der Render-Funktion seine LogikFunktion aufzurufen. Wenn man das hingekriegt hat kann man einen Schritt weitergehen.
 

Ähnliche Themen

Zurück
Oben