000
07.03.2006, 23:14 Uhr
Marco15
|
HI Leuts!
Ich hab nach ein paar Schwierigkeiten endlich geschafft die Genesis3D Header Datein und LibraryDatein einzubinden. Jetzt wollte ich ein Beispiel aus dem Buch Spieleprogrammierung mit C++ und Genesis3d kompilieren, aber da kommen Fehler, die ich noch nie hatte und wenn ich in der Hilfe nachlese, dann seh ich das so, als hätte ich die EngineDateien nicht richtig eingefügt.
Folgendes Beispiel:
Code: |
//--------------------------------------------------- // Game1.cpp : // Nur Anzeige von BSP-Welt (ohne Bewegungen) //---------------------------------------------------
#include "Game1.h"
// Spielobjekt TGame Game;
// Vorwärtsdeklaration (für Fensterereignisse) LRESULT CALLBACK WndProc (HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam);
// Windows-Hauptfunktion mit Game-Schleife int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // Fensterklasse initialisieren WNDCLASS Win; // Objekt der Fensterklasse MSG msg; // Aktuelle Meldung // Extrabytes für Klassen/Fensterinstanz Win.cbClsExtra = 0; Win.cbWndExtra = 0; // Instanz der Fensterklasse Win.hInstance = hInstance; // Symbol und Cursor der Fensterklasse Win.hIcon = LoadIcon(hInstance, IDI_APPLICATION); Win.hCursor = LoadCursor(NULL, IDC_ARROW); // Hintergrundfarbe (schwarz) und Fensterstil Win.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); Win.style = CS_HREDRAW | CS_VREDRAW; // Verknüpfung mit Ereignis-Routine Win.lpfnWndProc = WndProc; // Name der Fensterklasse Win.lpszClassName = GVersion; Win.lpszMenuName = NULL; // kein Menü // Registrierung der Fensterklasse RegisterClass (&Win); // Fenster erzeugen GHandle = CreateWindow (Win.lpszClassName, "Genesis3D - [Esc]=Ende", WS_TILED, CW_USEDEFAULT, CW_USEDEFAULT, MaxWidth, MaxHeight, NULL, NULL, hInstance, NULL); if (!GHandle) { return 0; // nicht ok } // Mauszeiger verbergen ShowCursor (false); // Fenster zeigen und "auffrischen" ShowWindow (GHandle, nCmdShow); UpdateWindow (GHandle); // Spielinitialisierung Game.CreateGame (); // Spielmodus auf "Laufen" einstellen Game.isRunning = true; // Solange Spiel "läuft" while (Game.isRunning) { // evtl. Fenstereignisse abfragen while (PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE)) { // Spielverlauf Game.RunGame (); if (!GetMessage(&msg, NULL, 0, 0)) { Game.isRunning = false; break; } // Ereignisdaten auswerten (lassen) TranslateMessage (&msg); DispatchMessage (&msg); } } // Programm-/Spielende Game.FreeGame (); return 1; // ok }
// Verarbeitung der Fensterereignisse LRESULT CALLBACK WndProc (HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) { // Ereignis auswerten switch (iMessage) { case WM_KEYDOWN: { switch (wParam) { case VK_ESCAPE: // Spielende mit [Esc]-Taste { PostMessage(hWnd, WM_QUIT, 0, 0); } } } // ansonsten Ereignis an "Default-Handler" default: return DefWindowProc (hWnd, iMessage, wParam, lParam); } return 0; }
//---------------------------------------------------
// Spiel initialisieren/"aufbauen" void TGame::CreateGame (void) { geRect WorldScreen; // Anzeigefläche char WorldName[64]; // Name der Welt/Level geVFile *WorldFile; // BSP-Datei (Welt/Level)
// 3D-Engine initialisieren Engine = geEngine_Create (GHandle, GVersion, "."); if (!Engine) ExitError ("3D-Engine kann nicht gestartet werden!"); // Anzeigedaten für Engine ausschalten geEngine_EnableFrameRateCounter(Engine, GE_FALSE); // Treiber auswählen SetDriver (); // Anzeigefläche festlegen WorldScreen.Left = 0; WorldScreen.Right = MaxWidth - 1; WorldScreen.Top = 0; WorldScreen.Bottom = MaxHeight - 1; // Koordinaten-Matrix setzen geXForm3d_SetIdentity (&XForm); // Kamera initialisieren Camera = geCamera_Create (2.0, &WorldScreen); if (!Camera) ExitError ("Kamera kann nicht installiert werden!"); // BSP-Datei laden strcpy (WorldName, Pfad); strcat (WorldName, BSP_Datei); WorldFile = geVFile_OpenNewSystem (NULL, GE_VFILE_TYPE_DOS, WorldName, NULL, GE_VFILE_OPEN_READONLY); // Wenn Datei ok, Welt/Level erzeugen if (WorldFile) { World = geWorld_Create(WorldFile); geVFile_Close(WorldFile); }; if (!World) ExitError ("Welt/Level lässt sich nicht erzeugen!"); // Welt/Level mit 3D-Engine verknüpfen if (!geEngine_AddWorld(Engine, World)) ExitError ("Welt/Level lässt sich nicht einbinden!"); }
//---------------------------------------------------
// Spiel "in Szene setzen" void TGame::RunGame (void) { // Koordinaten und Winkel ausrichten geXForm3d_SetIdentity (&XForm); geXForm3d_RotateX (&XForm, 0.0); geXForm3d_RotateY (&XForm, 0.0); geXForm3d_RotateZ (&XForm, 0.0); geXForm3d_Translate (&XForm, 0.0, 0.0, 0.0); geCamera_SetWorldSpaceXForm (Camera, &XForm); // Rendering starten if (!geEngine_BeginFrame(Engine, Camera, GE_TRUE)) ExitError ("BeginFrame gescheitert!"); // Welt/Level rendern und darstellen if (!geEngine_RenderWorld (Engine, World, Camera, 0.0)) ExitError ("Rendering gescheitert!"); // Rendering beenden if (!geEngine_EndFrame(Engine)) ExitError ("EndFrame gescheitert!"); }
//---------------------------------------------------
// Spiel "abbauen" void TGame::FreeGame (void) { // Kamera, Welt und Engine freigeben if (Camera) geCamera_Destroy (&Camera); if (World) geWorld_Free (World); if (Engine) { geEngine_ShutdownDriver(Engine); geEngine_Free (Engine); } // Zeiger "nullen" Camera = NULL; World = NULL; Engine = NULL; }
//--------------------------------------------------
// Grafiktreiber/modus wählen/setzen void TGame::SetDriver (void) { geDriver_System *DriverSystem; long Breite, Hoehe; // Treibersystem "einbetten" DriverSystem = geEngine_GetDriverSystem (Engine); if (!DriverSystem) ExitError ("Kein Treibersystem gefunden!"); // DirectX-Grafiktreiber aufnehmen Driver = geDriver_SystemGetNextDriver (DriverSystem, NULL); if (!Driver) ExitError ("Treiber nicht gefunden!"); // Suchschleife für Grafikmodus DMode = geDriver_GetNextMode (Driver, NULL); // Liste nach passendem Modus durchsuchen while(true) { if (!DMode) ExitError ("Falscher Treibermodus!"); // Auflösungswerte ermitteln geDriver_ModeGetWidthHeight (DMode, &Breite, &Hoehe); // Wenn Maße passen, Schleife verlassen if (Breite == MaxWidth && Hoehe == MaxHeight) break; // Ansonsten weitersuchen DMode = geDriver_GetNextMode (Driver, DMode); } // Grafiktreiber/modus überprüfen if ((!Driver) || (!DMode)) ExitError ("Kein passender Grafiktreiber/modus!"); // Grafiktreiber/modus initialisieren if (!geEngine_SetDriverAndMode (Engine, Driver, DMode)) ExitError ("Grafikinitialisierung fehlgeschlagen!"); }
//--------------------------------------------------
// Spielabbruch bei Fehler void TGame::ExitError (char *Txt) { // Fehlermeldung anzeigen, Programm abbrechen MessageBox (NULL, Txt, "Fehler", 48); FreeGame(); _exit (EXIT_FAILURE); }
|
|