Hallo mal wieder.
Ich programmiere zur Zeit einen Netzwerk Modus für mein aktuelles Projekt (ein rundenbasiertes Strategiespiel). Hierbei ist ein Spieler der Host, und ein (oder mehrere) Spieler der Client. Der Host kann nun ein Spiel starten, in das sich die Clienten einloggen können. An dieser Stelle sind Clienten und Host im "Vor-Spiel" Menü (einfach eine Auflistung aller Spieler, die ausgewählte Karte wird angezeigt, so wie bei fast jedem Strategiespiel). Der Host kann das Spiel nun starten, dazu wird auf dem Host Computer einfach
|
C-/C++-Quelltext
|
1
|
g_pDXTest->m_GameState == GS_GAME
|
aufgerufen.
Das klappt soweit auch. Außerdem sendet der Host via WinSock die Meldung, dass das Spiel gestartet wird an die Clienten.
Die Verarbeitung dieser Nachricht sieht wie folgt aus:
|
C-/C++-Quelltext
|
1
2
|
if(strncmp(buf,"start",5)==0)
g_pDXTest->SetGameState(GS_GAME); //Spiel starten
|
An dieser Stelle stürzt das Spiel allerdings auf der Client-Seite immer ab. Auf der Host-Seite startet das Spiel so wie es soll.
Im Log der Tribase Engine steht:
[...]
INFO: Nachrichtenschleife wird betreten... (TriBase.cpp, Zeile 179, Funktion tbDoMessageLoop)
FEHLER: Das Modell hat keine Extradaten! (tbUtils.cpp, Zeile 1073, Funktion tbLineHitsModel)
WARNUNG: tbExit wurde nicht aufgerufen! Wird automatisch erledigt... (TriBase.cpp, Zeile 48, Funktion DllMain)
INFO: TriBase-Engine wird heruntergefahren... (TriBase.cpp, Zeile 113, Funktion tbExit)
WARNUNG: Direct3D wurde nicht heruntergefahren! Wird automatisch erledigt... (TriBase.cpp, Zeile 121, Funktion tbExit)
INFO: Die Direct3D-Komponente wurde heruntergefahren. (tbDirect3D.cpp, Zeile 313, Funktion tbDirect3D::Exit)
WARNUNG: DirectInput wurde nicht heruntergefahren! Wird automatisch erledigt... (TriBase.cpp, Zeile 128, Funktion tbExit)
INFO: Die DirectInput-Komponente wurde heruntergefahren. (tbDirectInput.cpp, Zeile 784, Funktion tbDirectInput::Exit)
WARNUNG: DirectSound wurde nicht heruntergefahren! Wird automatisch erledigt... (TriBase.cpp, Zeile 135, Funktion tbExit)
INFO: Die DirectSound-Komponente wurde heruntergefahren. (tbDirectSound.cpp, Zeile 128, Funktion tbDirectSound::Exit)
WARNUNG: Texturen werden automatisch gelöscht! Bitte die Exit-Methode von tbTextureManager aufrufen! (TriBase.cpp, Zeile 142, Funktion tbExit)
INFO: Der Texturmanager wurde heruntergefahren. (tbTextureManager.cpp, Zeile 59, Funktion tbTextureManager::Exit)
INFO: Alle Speicherbereiche freigegeben! (tbMemory.cpp, Zeile 116, Funktion tbMemExit)
INFO: Herunterfahren abgeschlossen!
Vielleicht sollte ich noch erwähnen, dass es 2 Threads gibt, die zum Empfang von Netzwerk Nachrichten verwendet werden. Einen für den Host, einen für den Clienten. Je nachdem ob man Host oder Client ist läuft aber nur einer dieser Threads. Die können sich also nicht in die Quere kommen.
Meine Frage also erstmal (bevor ich meinen gesamten Code poste
): Kann mir jemand was zu der Fehlermeldung sagen?
Danke schonmal.
EDIT: Mir fiel grad noch ne andere Frage ein, muss ja nich extra nen neuen thread erstellen. Gibt es in der TriBase engine sowas wie eine onmouseover funktion? Ich würde nämlich gerne, dass eine Art Tooltip (Also einfach ein kleines Fenster mit Text und eventuell Bild, ohne Buttons) erscheint wenn man mit dem Cursor über einen Button oder ein beliebiges Element der TriBase GUI fährt.