Wie erstellen "Game Maker" -Tools wie Blitz3D EXE-Dateien?

8

Es gibt verschiedene Anwendungen wie Blitz3D oder andere Arten von Spielkonstruktionswerkzeugen, die Skripte oder andere Spieldaten zu einer einzigen ausführbaren Datei zusammenstellen. Wie haben sie das gemacht?

user3689
quelle

Antworten:

10

Verschiedene Tools nähern sich dem auf unterschiedliche Weise, aber wie Blitz3D es tut, besteht es darin, den Code und einen Interpreter in ein Bundle zu packen. Wenn Sie dann die exe ausführen, wird der Interpreter gestartet und der gebündelte Code übergeben. Es ist ziemlich genau so, wie beispielsweise Python bei der Verwendung von py2exe funktioniert.

In vielen Spielentwicklungstools ist der Code, der zusammen mit der ausführbaren Datei gebündelt wird, einfach Rohtext, den der Interpreter analysiert. Einige verwenden jedoch einen Bytecode-Ansatz wie Java, bei dem der Quellcode in eine Zwischenform umgewandelt wird, die von der virtuellen Maschine verwendet wird. Ich denke, Unity verwendet diesen letzteren Ansatz, bin mir aber nicht sicher.

Alle Spieleentwicklungstools, die ich mir vorstellen kann, basieren auf diesem Ansatz eines Core-Interpreters / einer virtuellen Maschine, die dann mit dem Code verpackt werden, oder sind Bibliotheken, die Sie in Visual Studio oder was auch immer kompilieren.

jhocking
quelle
Ist der zweite Ansatz schneller als der erste?
Quazi Irfan
Es gibt Vor- und Nachteile, aber das Wichtigste bei der Geschwindigkeit ist, dass sich der gesamte wirklich geschwindigkeitskritische Code (z. B. Rendering-Routinen) im Interpreter befindet und daher die Geschwindigkeit des interpretierten Codes nicht so wichtig ist. Der interpretierte Code ruft einfach eine Funktion wie loadMesh () auf und der Interpreter erledigt den Rest. Dies ist genau die gleiche Situation wie bei Verwendung einer in eine Spiel-Engine eingebetteten Skriptsprache. In der Tat gibt es im Blitz3D-Forum häufige Debatten darüber, ob es sich um eine "Spiel-Engine" handelt oder nicht.
Schockieren
-1

Programmablauf, Variablenhandling und dergleichen werden zu reinem Maschinencode kompiliert, während die Befehle auf hoher Ebene als C ++ - Bibliotheksfunktionen implementiert werden, die aus der Laufzeitbibliothek aufgerufen werden, die in jede von Blitz generierte ausführbare Datei kompiliert wurde. Nicht aus der Blitz Basic-Familie wird wie Python interpretiert.

Scharfschützenschafe
quelle
Ich bin mir nicht sicher, was Sie unter "als C ++ - Bibliotheksfunktionen implementiert, die aus der Laufzeitbibliothek aufgerufen werden" verstehen, aber entweder ist dies nur eine ausgefallene Art zu sagen, dass der Code des Benutzers von der Core Engine interpretiert wird, oder Sie irren sich einfach. Vor einigen Jahren gab es ein kurzlebiges Produkt namens CoolBasic, das den Benutzercode in einer Blitz3D-Exe ersetzte (es wurde natürlich heruntergefahren, weil dies ein Hacking fragwürdiger Legalität war). Das hätte nicht funktioniert, wenn der Code des Benutzers zur Laufzeit kompiliert worden wäre.
Jhocking