Dies ist kein detailliertes Tutorial zu DirectX, sondern eine Erklärung, wie man DELPHI zum Entwickeln von DirectX-Spielen verwendet. Denn Bücher über DirectX, egal ob online oder in Buchhandlungen, beschreiben sie grundsätzlich in C++ oder VC Sehr wenig, der Zweck dieses Artikels besteht darin, den Lesern zu ermöglichen, zu lernen, wie sie vorhandene Informationen zum Lernen und Entwickeln von Spielen nutzen können.
Dieser Artikel richtet sich an Leser, die ein gewisses Verständnis von DirectX haben, aber nicht wissen, wie man DirectX-Spiele unter DELPHI entwickelt.
Empfohlene Referenzmaterialien:
<<Game Programming Guide>>,<<DirectX Chinese Collection>>
Kann DELPHI Spiele entwickeln?
Die Antwort lautet natürlich: Viele Leute in vielen Online-Spieleforen glauben, dass nur C++ oder VC zum Entwickeln von Spielen verwendet werden können. DELPHI ist nur für Desktop-Anwendungen geeignet. Wir empfehlen Ihnen, sich den von DELPHI und VC kompilierten Code anzusehen oder sich das mit DELPHI entwickelte Spiel „Age of Miracles“ anzusehen und die Grafik ist besser als Age of Empires.DELP HI ist vollständig objektorientiert, kann Assembly einbetten und unterstützt MMX-Anweisungen (MMX-Register in DELPHI sind mm0-mm7). Tatsächlich ist DELPHI unabhängig von VC nur ein Tool. Solange Sie über gute interne Fähigkeiten verfügen, können Sie daraus ein gutes Programm oder Spiel machen.
Vorbereitung:
Derzeit gibt es zwei Möglichkeiten, DirectX-Spiele mit DELPHI zu entwickeln. Eine davon ist die Verwendung der DirectX-Deklaration (http://www.delphi-jedi.org). Hier werden wir Jedi-Direct verwenden Der Grund, warum ich das DirectX-Deklarationspaket wähle, ist, dass es die SDK-Methode zum Entwickeln von Spielen verwendet. Wenn ich in Zukunft auf andere Sprachen umsteigen muss Was die DelphiX-Steuerung betrifft, habe ich sie noch nie verwendet und habe auch kein Mitspracherecht. Ich verwende jedoch keine japanischen Produkte.
Gehen Sie zunächst zur folgenden Adresse, um das DirectX-Deklarationspaket herunterzuladen (http://kuga.51.net/download/files/directx7.rar) und extrahieren Sie es in Ihr benutzerdefiniertes Verzeichnis. Wählen Sie dann Extras->Umgebungsoptionen in DELPHI. Wählen Sie im geöffneten Fenster die Registerkarte „Bibliothek“ und klicken Sie auf die Schaltfläche hinter „Bibliothekspfad“. Es öffnet sich ein Verzeichnisfenster. Klicken Sie dann auf „Ausgegraute Elemente, die als ungültig gekennzeichnet sind“. Klicken Sie auf die Schaltfläche auf der rechten Seite des Pfads. Klicken Sie dann auf die Schaltfläche HINZUFÜGEN, um das Verzeichnis, in dem sich die DirectX-Deklaration befindet, zum Bibliothekspfad von DELPHI hinzuzufügen in Verwendungen. Das Paket enthält mehrere Beispiele, die als Referenz für den Einstieg verwendet werden können.
Debugging-Erfahrung:
Bei der Entwicklung eines Vollbildspiels ist es am besten, die Bildschirmauflösung während des Entwurfs auf die gleiche Auflösung wie das Spiel einzustellen, um eine Beschädigung des Bildschirms durch häufiges Wechseln der Auflösung während des Debuggens zu vermeiden.
Es ist am besten, Vollbildspiele unter WIN2000/XP zu entwickeln. Andernfalls gerät das Spiel beim Debuggen in eine Endlosschleife oder es kommt zu einer Ausnahme Unter 2000/XP können Sie ALT+TAB drücken, um zu DELPHI zu wechseln (aber zu diesem Zeitpunkt Da DirectX-Spiele im Vollbildmodus ausgeführt werden und den Bildschirm belegen, werden keine Änderungen auf dem Bildschirm vorgenommen. Sie müssen es also noch ein paar Mal versuchen. Drücken Sie STRG+F2, um das Spiel zu beenden. Wenn es nicht normal ist, wechseln Sie zu DELPHI Drücken Sie zuerst die Eingabetaste und drücken Sie dann STRG+F2, um das Debugging-Spiel zu beenden.
Beachten:
Wenn Sie DELPHI7 verwenden, ändern Sie bitte Zeile 145 {$IFDEF VER140} in DirectDraw.pas in {$IFDEF VER150} für eine normale Kompilierung und Interpretation.
Es ist besser, die API zum Erstellen des Hauptspielfensters zu verwenden, anstatt die TFORM-Klasse von VCL zu verwenden.
Schauen wir uns zunächst den Codeausschnitt an, der ein DirectDraw-Objekt mit C++ und DELPHI initialisiert.
C++-Version:
BOOL InitDDraw( )
{
LPDIRECTDRAW7 lpDD; //Zeiger auf DirectDraw-Objekt
if (DirectDrawCreateEx (NULL, (void **)&lpDD, IID_IDirectDraw7, NULL) != DD_OK )
return FALSE; {DirectDraw-Objekt erstellen}
{Die if (xxx != DD_OK)-Methode wird zur Fehlererkennung verwendet, was die am häufigsten verwendete Methode ist}
if (lpDD->SetCoOperativeLevel(hwnd,DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN) != DD_OK )
return FALSE; {DirectDraw-Steuerungsebene festlegen}
if ( lpDD->SetDisplayMode( 640, 480, 32, 0, DDSDM_STANDARDVGAMODE ) != DD_OK )
return FALSE; {Anzeigemodus festlegen}
}
DELPHI-Version:
Funktion TForm1.InitDirectDraw: Boolean;
var
lpDD: IDirectDraw7;
beginnen
Ergebnis := Falsch; {Angenommen, die Initialisierung ist fehlgeschlagen}
{DirectDraw-Objekt erstellen}
if DirectDrawCreateEx(nil, lpDD, IID_IDIRECTDRAW7, nil) <> DD_OK dann
Ausfahrt;
{Legen Sie die Steuerungsebene von DirectDraw fest. Der erste Parameter ist das Handle des DirectDraw-Fensters. Hier wird die Steuerungsebene auf Vollbild plus Exklusivmodus eingestellt.}
wenn lpDD.SetCooperativeLevel(Hwnd, DDSCL_EXCLUSIVE or DDSCL_FULLSCREEN) <> DD_OK dann
Ausfahrt;
{Stellen Sie den Anzeigemodus ein. Der erste und zweite Parameter ist die Auflösung. Der dritte Parameter wird verwendet, um die Anzahl der Farbstellen im Anzeigemodus festzulegen.
Der vierte Parameter legt die Aktualisierungsrate des Bildschirms fest. 0 ist der Standardwert. Der einzig gültige Wert des vierten Parameters ist DDSDM_STANDARDVGAMODE}.
wenn lpDD.SetDisplayMode(640, 480, 32, 0, DDSDM_STANDARDVGAMODE) <> DD_OK dann
Ausfahrt;
Ergebnis := True;
Ende;
Es ist ersichtlich, dass diese beiden Codeteile bis auf die Syntax und die Objektnamen genau gleich sind. Solange wir dies verstehen, können wir auf VC- oder C++-Informationen zurückgreifen und dann DELPHI verwenden, um unsere eigenen Spiele zu erstellen DirectX-Deklaration in DELPHI Der Name, der Strukturname und der VC sind unterschiedlich. Die allgemeine Entsprechung ist wie folgt:
DELPHI VC
DirectDraw-ObjektIDirectDraw7 LPDIRECTDRAW7
Seitenobjekt IDirectDrawSurface7 LPDIRECTDRAWSURFACE7
DirectDraw-Seitenbeschreibung TDDSurfaceDesc2 DDSURFACEDESC2
Grundsätzlich sind nur die Präfixe unterschiedlich. Aus Platzgründen werden hier nicht alle Objekte und Strukturen aufgeführt.