Genesis 3d Hilfe!!!



  • Game.cpp:

    //---------------------------------------------------
    // 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);
    }
    

    und Game.h:

    //---------------------------------------------------
    // Game1.h :
    // Header mit Klassendeklaration von TGame
    //---------------------------------------------------
    
    // #define _BCB  // nur für Borland C++Builder
    
    #include <windows.h>
    #include "include\genesis.h"
    
    class TGame
    {
    public:
      // Eigenschaften
      geEngine      *Engine;     // 3D-Engine
      geWorld       *World;      // World/Level
      geCamera      *Camera;     // Kamera/Betrachter
      geDriver      *Driver;     // Grafiktreiber
      geDriver_Mode *DMode;      // Grafikmodus
      geXForm3d      XForm;      // Welt-Matrix
      bool           isRunning;  // Spielmodus an/aus
      // Methoden
      void CreateGame (void);
      void RunGame    (void);
      void FreeGame   (void);
      void SetDriver  (void);
      void ExitError  (char *Txt);
    } ;
    
    // Pfad- und Dateinamen
    const char *Pfad      = ".\\levels\\";
    const char *BSP_Datei = "World0.bsp";
    const char *GVersion  = "GPlay1";
    // Globale Konstanten
    const int MaxWidth    = 640;   // Max. Screenbreite
    const int MaxHeight   = 480;   // Max. Screenhöhe
    
    // Globalvariable
    HWND GHandle;      // Handle des "Spielfensters"
    

    Da steht irgendwas von Treiber nicht gefunden!


Anmelden zum Antworten