Comment les outils «game maker» comme Blitz3D créent-ils des fichiers .exe?

8

Il existe plusieurs applications comme Blitz3D ou d'autres types d'outils de construction de jeux qui compilent des scripts ou d'autres données de jeu dans un seul fichier exécutable. Comment font-ils cela?

user3689
la source

Réponses:

10

Différents outils abordent cela de différentes manières, mais la manière dont Blitz3D le fait consiste à envelopper le code et un interpréteur dans un bundle. Ensuite, lorsque vous exécutez l'exe, cela lance l'interpréteur et transmet le code fourni. C'est à peu près la même chose que, par exemple, le fonctionnement de Python lors de l'utilisation de py2exe.

Dans de nombreux outils de développement de jeux, le code fourni avec l'exécutable est simplement du texte brut que l'interpréteur analyse. Cependant, certains adoptent une approche de bytecode comme Java, où le code source est transformé en une forme intermédiaire que la machine virtuelle utilise. Je pense que Unity utilise cette dernière approche mais je ne suis pas sûr.

Du haut de ma tête, tous les outils de développement de jeux que je peux imaginer sont que les exécutables de packages sont basés sur cette approche d'un interpréteur de base / machine virtuelle, puis les empaquettent avec le code, ou sont des bibliothèques que vous compilez dans Visual Studio ou autre.

jhocking
la source
La seconde approche est-elle plus rapide que la première?
Quazi Irfan
Il y a des avantages et des inconvénients, mais la principale chose à garder à l'esprit en ce qui concerne la vitesse est que tout le code vraiment critique (par exemple, les routines de rendu) est dans l'interpréteur et donc la vitesse du code interprété n'est pas aussi importante. Le code interprété appelle simplement une fonction comme loadMesh () et l'interpréteur fait le reste. C'est exactement la même situation que l'utilisation d'un langage de script intégré dans un moteur de jeu; en effet, il y a des débats fréquents sur le forum de Blitz3D pour savoir s'il s'agit ou non d'un "moteur de jeu".
jhocking
-1

Le flux de programme, la gestion des variables et autres sont compilés en code machine pur, tandis que les commandes de haut niveau sont implémentées en tant que fonctions de bibliothèque C ++ qui sont appelées à partir de la bibliothèque d'exécution compilée dans chaque exécutable généré par Blitz. Non de la famille Blitz Basic est interprété comme Python.

Sniper Sheep
la source
Je ne suis pas sûr de ce que vous entendez par «implémenté en tant que fonctions de bibliothèque C ++ qui sont appelées à partir de la bibliothèque d'exécution», mais soit c'est juste une façon élégante de dire que le code de l'utilisateur est interprété par le moteur principal, soit vous vous trompez simplement. Il y a plusieurs années, il y avait un produit de courte durée appelé CoolBasic qui fonctionnait en remplaçant le code utilisateur dans un exe Blitz3D (il a été fermé bien sûr parce que cela piratait une légalité douteuse); cela n'aurait pas fonctionné si le code de l'utilisateur avait été compilé dans le runtime.
jhocking