AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Genesis problem

Ein Thema von mb1996 · begonnen am 25. Apr 2010 · letzter Beitrag vom 5. Mai 2010
Antwort Antwort
mb1996

Registriert seit: 30. Dez 2009
243 Beiträge
 
Delphi 2009 Professional
 
#1

Genesis problem

  Alt 25. Apr 2010, 18:39
Hallo Leute,
ich habe ein großes Problem.
Ich habe ein Tutorial über Genesis gemacht.
Aber wenn ich die Anwendung starte kommt immer der Fehler: Kein Grafiktreiber/modus ausgewählt.
Quellencode:

Delphi-Quellcode:

unit G4DGame1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  // Genesis_for_Delphi-Units
  G4D_Genesis, G4D_BaseType, G4D_XForm3D, G4D_geTypes, G4D_Vfile, G4DDriver;

type
  TForm1 = class(TForm)
    procedure FormCreate (Sender: TObject);
    procedure FormActivate (Sender: TObject);
    procedure FormDestroy (Sender: TObject);
    procedure FormClick (Sender: TObject);
  private
    { Private-Deklarationen }
    Engine : pgeEngine; // 3D-Engine
    World : pgeWorld; // World/Level
    Camera : pgeCamera; // Kamera/Betrachter
    Driver : pgeDriver; // Grafiktreiber
    DMode : pgeDriver_Mode; // Grafikmodus
    XForm : geXForm3D; // Matrix für Welt->Betrachter
    isRunning: Boolean; // Schalter für Spiel (ein/aus)
    CW8087 : DWord; // FPU-Kontrollwert
    procedure ExitError (Txt: String);
    procedure CreateGame;
    procedure RunGame;
    procedure FreeGame;
  public
    { Public-Deklarationen }
  end;

const
  Pfad = '.\';
  BSP_Datei = 'G4DWorld.bsp';
  GVersion = 'G4DPlay1';
  OK = GE_TRUE; // Kontrollwert für Engine-Methoden
  MaxWidth = 640; // Max. Screenbreite
  MaxHeight = 480; // Max. Screenhöhe
  MCW_EM = DWORD($133f); // für evtl. Division-durch-Null-Fehler

var
  Form1 : TForm1; // Spiel-"Unterlage"
  GHandle : HWnd; // Handle des Formulars
  GInstance : LongInt; // Handle der Applikation

implementation

  {$R *.DFM}

procedure TForm1.ExitError (Txt: String);
begin
  // Fehlermeldung anzeigen, Programm abbrechen
  ShowMessage (Txt); halt;
end;

procedure TForm1.CreateGame;
var
  WorldScreen: geRect; // Anzeigefläche
  WorldName: String; // Name der BSP-Datei (Welt/Level)
  WorldFile: pgeVFile; // BSP-Datei (Welt/Level)
begin
  // Anzeigefläche festlegen
  with WorldScreen do
  begin
    Left := 0; Right := MaxWidth - 1;
    Top := 0; Bottom := MaxHeight - 1;
  end;
  // Koordinaten-Matrix setzen
  geXForm3D_SetIdentity (@XForm);
  // Kamera initialisieren
  Camera:= geCamera_Create (2.0, @WorldScreen);
  if Camera = nil then
    ExitError('Kamera kann nicht installiert werden!');
  // BSP-Datei laden
  WorldName := Pfad + BSP_Datei;
  WorldFile := geVFile_OpenNewSystem (nil,
    GE_VFILE_TYPE_DOS, PChar(WorldName), nil, GE_VFILE_OPEN_READONLY);
  // Wenn Datei ok, Welt/Level erzeugen
  if WorldFile <> nil then
  begin
    World := geWorld_Create(WorldFile);
    geVFile_Close(WorldFile);
  end;
  if World = nil then
    ExitError ('Welt/Level lässt sich nicht erzeugen!');
  // Welt/Level mit 3D-Engine verknüpfen
  if geEngine_AddWorld(Engine, World) <> OK then
    ExitError ('Welt/Level lässt sich nicht einbinden!');
end;

procedure TForm1.RunGame;
begin
  // Spielmodus auf "Laufen" einstellen
  isRunning := true;
  // Solange Spiel "läuft"
  while isRunning do
  begin
    // ggf. auf Ereignisse reagieren (z.B. Tastatur/Maus)
    Application.ProcessMessages;
    // 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) <> OK then
      ExitError ('BeginFrame gescheitert!');
    // Welt/Level rendern und darstellen
    if geEngine_RenderWorld (Engine, World, Camera, 0.0) <> OK then
      ExitError ('Rendering gescheitert!');
    // Rendering beenden
    if geEngine_EndFrame(Engine) <> OK then
      ExitError ('EndFrame gescheitert!');
  end;
end;

procedure TForm1.FreeGame;
begin
  // Kamera, Welt und Engine freigeben
  if Camera <> nil then geCamera_Destroy (@Camera);
  if World <> nil then geWorld_Free (World);
  if Engine <> nil then geEngine_Free (Engine);
  // Zeiger "nullen"
  Camera := nil; World := nil; Engine := nil;
end;

procedure TForm1.FormCreate(Sender: TObject);
var AppDir: String;
begin
  // Wert von ControlWord speichern, Division durch Null "ausschalten"
  CW8087 := Default8087CW;
  Set8087CW(MCW_EM);
  // Handle/Instanz von Formular/Applikation für 3D-Engine festlegen
  GHandle := Self.Handle;
  GInstance := hInstance;
  // Pfad der Applikation ermitteln
  AppDir := ExtractFilePath (Application.Exename);
  // 3D-Engine initialisieren
  Engine := geEngine_CreateWithVersion
    (GHandle, GVersion, PChar(AppDir), GE_VERSION);
  if Engine = nil then
    ExitError ('3D-Engine kann nicht gestartet werden!');
  // Treiber auswählen (Methode aus Unit G4DDriver)
  SetDriver (GInstance, GHandle, Engine, Driver, DMode);
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  // Grafiktreiber/modus überprüfen
  if (Driver = nil) or (DMode = nil) then
    ExitError ('Kein Grafiktreiber/modus ausgewählt!');
  // Grafiktreiber/modus initialisieren
  if geEngine_SetDriverAndMode(Engine, Driver, DMode) <> OK then
    ExitError ('Grafikinitialisierung fehlgeschlagen!');
  // Anzeigedaten für Engine ausschalten
  geEngine_EnableFrameRateCounter(Engine, GE_FALSE);
  // Spiel initialisieren
  CreateGame;
  // Wiederholungs-Schleife für Spielverlauf
  RunGame;
  // Formular (bei Spielende) schließen
  Close;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  // Spiel "freigeben"
  FreeGame;
  // Alten FPU-Kontrollwert wiederherstellen
  Set8087CW (CW8087);
end;

procedure TForm1.FormClick(Sender: TObject);
begin
  isRunning := false;
end;

end.
Kann mir jemand bitte sagen, was ich falsch mache?
Ich benutze Delphi7 mit Windows XP.
  Mit Zitat antworten Zitat
alf.stefan

Registriert seit: 11. Apr 2003
88 Beiträge
 
Delphi 7 Professional
 
#2

Re: Genesis problem

  Alt 26. Apr 2010, 14:52
Hallo, ich hab zwar keine Ahnung von Genesis aber ich hab mal gegoogelt und folgendes gefunden

Code:
void TGame::SetDriver (void)

   geDriver_System *DriverSystem; long Breite, Hoehe;
   DriverSystem = geEngine_GetDriverSystem (Engine);
   if (!DriverSystem) ExitError ("kein Treibersystem gefunden!");
   Driver = geDriver_SystemGetNextDriver (DriverSystem, NULL);
   if (!Driver) ExitError ("Treiber nicht gefunden!");
   DMode = geDriver_GetNextMode (Driver, NULL);
   while(true)
   { 
      if (!DMode) ExitError ("Falscher Treibermodus!");
      geDriver_ModeGetWidthHeight (DMode, &Breite, &Hoehe);
      if (Breite == MaxWidth && Hoehe == MaxHeight) break;
      DMode = geDriver_GetNextMode (Driver, DMode);
   } 
   if ((!Driver) || (!DMode)) ExitError ("kein passender Grafiktreiber/modus!");
   if (!geEngine_SetDriverAndMode (Engine, Driver, DMode)) ExitError
      ("Grafikinitialisierung fehlgeschlagen!");
}

DMode ist denke ich ein Teil des Problems
wenn Du Dir den Code aus dem Link anschaust siehst Du dass der Driver und der Mode in Abhängigkeit der Auflösung gesucht werden.
Vielleicht klappt es wenn Du Dich an das Vorgehen in dem C Programm hältst.
  Mit Zitat antworten Zitat
mb1996

Registriert seit: 30. Dez 2009
243 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Genesis problem

  Alt 26. Apr 2010, 16:05
Wo soll ich das denn einsetzen (habe noch nicht viel mit Treiber gemacht)?
Bei Create?
Und was soll ich wegstreichen?
  Mit Zitat antworten Zitat
mb1996

Registriert seit: 30. Dez 2009
243 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Genesis problem

  Alt 27. Apr 2010, 14:55
Aber vielen Dank schonmal dafür!!!
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
903 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Genesis problem

  Alt 27. Apr 2010, 18:31
Hallo mb1996,

habe mir mal erlaubt deinem Link entsprechend die Dateien zu laden und ein Blick
rüber 'geworfen'. Da ist doch eine Demo dabei und in der steht ganz genau, wie
der User über in einem Dialog aufgefordert wird einen Treiber zu laden.
Warum machst du es nicht so ähnlich?

Mfg

Alter Mann
  Mit Zitat antworten Zitat
mb1996

Registriert seit: 30. Dez 2009
243 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Genesis problem

  Alt 27. Apr 2010, 19:40
Wenn du G4DPlay1 meinst, dann weiß ich nicht was du meinst.
Denn da ist es das selbe Problem.
Ausserdem erscheint kein Dialog, wo man den Grafikmodus, -treiber, -karte... auswählen kann.


Wenn es eine andere Demo ist, dann wär es nett, wenn du sie als Anhang hinzufügst.
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
903 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Genesis problem

  Alt 28. Apr 2010, 07:49
Hi,

ich habe mal die Demo anghängt.
Angehängte Dateien
Dateityp: zip demo_231.zip (17,0 KB, 10x aufgerufen)
  Mit Zitat antworten Zitat
mb1996

Registriert seit: 30. Dez 2009
243 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Genesis problem

  Alt 28. Apr 2010, 16:42
Nur mal so. Geht bei euch die Demo? Bei mir findet er nicht die Units.
  Mit Zitat antworten Zitat
mb1996

Registriert seit: 30. Dez 2009
243 Beiträge
 
Delphi 2009 Professional
 
#9

Re: Genesis problem

  Alt 5. Mai 2010, 15:39
Kann mir jemand helfen?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf