AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi FormAktivate usw. werden übersprungen
Thema durchsuchen
Ansicht
Themen-Optionen

FormAktivate usw. werden übersprungen

Ein Thema von IKEA · begonnen am 13. Jul 2007 · letzter Beitrag vom 13. Jul 2007
Antwort Antwort
IKEA

Registriert seit: 8. Jul 2007
2 Beiträge
 
#1

FormAktivate usw. werden übersprungen

  Alt 13. Jul 2007, 18:59
Hi

Ich hab mir vor ein paar Tagen das Buch Game Programming für Kids gekauft.Das war natürlich super und ich hab sofort mit dem 1. Kapitel angefangen. Als dann mein 1. Programm(is nur ein Standbild^^) nicht funzte und ich lies ich es in Einzelschritten laufen und bemerkte, dass die Hauptunit(Ich weiß nich wie ich das sonst nennen soll) garnicht genutzt wird(d.h. es lädt erst alle Dateien die ich hinter uses gesetzt habe, dann kommt es zu der 'hautunit' zurück und lässt die FormCreate usw. Anweisungen einfach aus und geht über zu end.)

Hier is der Code :
Delphi-Quellcode:
unit Versuch;
// Nur Anzeige von BSP-Welt (ohne Bewegungen)

interface

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

type
  TPlay = class(TForm)
    procedure FormCreate (Sender: TObject);
    procedure FormActivate (Sender: TObject);
    procedure FormDestroy (Sender: TObject);
    procedure FormClick (Sender: TObject);
    procedure FormKeyPress (Sender: TObject; var Key: Char);
  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 = '.\levels\';
  BSP_Datei = 'World0.bsp';
  GVersion = 'GPlay1';
  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
  Play : TPlay; // Spiel-"Unterlage"
  GHandle : HWnd; // Handle des Formulars
  GInstance : LongInt; // Handle der Applikation

implementation

  {$R *.DFM}

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

procedure TPlay.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 TPlay.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 TPlay.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 TPlay.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 GDriver)
  SetDriver (GInstance, GHandle, Engine, Driver, DMode);
end;

procedure TPlay.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 TPlay.FormDestroy(Sender: TObject);
begin
  // Spiel "freigeben"
  FreeGame;
  // Alten FPU-Kontrollwert wiederherstellen
  Set8087CW (CW8087);
end;

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

procedure TPlay.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Ord(Key) = VK_ESCAPE then isRunning := false;
end;

end.
Auf ner CD die beim Buch dabei war sind alle Projekte schon fertig drauf.Bei dem Projekt auf der CD funzt es komischerweise.(Hab mir auch schon den text von dem Cd-Projekt kopiert, es tritt aber der gleiche fehler auf)
Ich hoffe dass mir jemand helfen kann

MfG IKEA
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: FormAktivate usw. werden übersprungen

  Alt 13. Jul 2007, 19:02
Naja, du musst auch irgendwo (z.B. in einem initialization-Abschnitt oder dem Anweisungsblock des Programms) die Methoden dem Ereignis zuweisen.

Form1.OnActivate:=Form1.FormActivate; So zum Beispiel.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: FormAktivate usw. werden übersprungen

  Alt 13. Jul 2007, 19:06
Wird den eine Instanz von TPlay erzeugt?
Markus Kinzler
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#4

Re: FormAktivate usw. werden übersprungen

  Alt 13. Jul 2007, 19:14
Hi ikea

erst mal herzlich wilkommen in der DP

Mal eine kurze Frage:

Fängst du gerade an zu proggen?

Oder hast du damit gute Erfahrungen und versuchst die ersten Schritte in Game-Programmierung?

Wenn du die erste Frage bejaen kannst und die zweite nicht, dann empfehle ich dir mit etwas einfacherem anzufangen. Das Problem mit dem kopieren von 'ner Menge Code ohne ihn zu verstehen fängt damit an, dass, wenn etwas nicht läuft, man eigentlich absolut null Durchblick bekommt und außer rumprobieren ohne Plan den Fehler nicht findet.

Gehe Schritt für Schritt vor und lerne zuerst wie das so alles funzt mit den Klassen, Proceduren, Function, Variablen .... API ...

Hast du dann so in etwa einen Plan, nehm dir was schwereres vor.

gruß oki
42
  Mit Zitat antworten Zitat
IKEA

Registriert seit: 8. Jul 2007
2 Beiträge
 
#5

Re: FormAktivate usw. werden übersprungen

  Alt 13. Jul 2007, 19:41
Vielen Dank für die vielen Antworten.
Ich hab das Problem nun gelöst

MfG IKEA
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#6

Re: FormAktivate usw. werden übersprungen

  Alt 13. Jul 2007, 21:37
Hi IKEA,

und was wars nun?
42
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#7

Re: FormAktivate usw. werden übersprungen

  Alt 13. Jul 2007, 22:20
Zitat von oki:
Hi IKEA,

und was wars nun?
Wie ich Crossposts liebe...
http://forum.dsdt.info/viewtopic.php?t=33922

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von dajuhsa
dajuhsa

Registriert seit: 20. Apr 2007
397 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: FormAktivate usw. werden übersprungen

  Alt 13. Jul 2007, 23:07
Zitat:
Hans-Georg Schumann
Game Programming
für Kids
Band 3
auf der CD: Vollversion von Delphi 3 professional
genesis 3d...
hab ich recht?

edit: oh, da stehts ja... lala
das Essen ist wie das Internet - Downstream ist immer angenehmer als Upstream
-
Warum missbraucht die ganze Programmierwelt Images als Paintboxen
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz