¿Cómo las herramientas de "creador de juegos" como Blitz3D crean archivos .exe?

8

Hay varias aplicaciones como Blitz3D u otros tipos de herramientas de construcción de juegos que compilan scripts u otros datos del juego en un solo archivo ejecutable. ¿Cómo lo hacen?

usuario3689
fuente

Respuestas:

10

Las diferentes herramientas se acercan a eso de diferentes maneras, pero la forma en que Blitz3D lo hace es envolver el código y un intérprete en un paquete. Luego, cuando ejecuta el exe, se inicia el intérprete y se pasa el código incluido. Es casi lo mismo que, por ejemplo, Python funciona cuando se usa py2exe.

En muchas herramientas de desarrollo de juegos, el código que se incluye junto con el ejecutable es simplemente texto sin formato que el intérprete analiza. Sin embargo, algunos adoptan un enfoque de código de bytes como Java, donde el código fuente se convierte en una forma intermedia que utiliza la máquina virtual. Creo que Unity usa este último enfoque, pero no estoy seguro.

Fuera de mi cabeza, todas las herramientas de desarrollo de juegos que puedo pensar que los ejecutables del paquete se basan en este enfoque de un intérprete central / máquina virtual y luego lo empaquetan con el código, o son bibliotecas que compila en Visual Studio o lo que sea.

jhocking
fuente
¿El segundo enfoque es más rápido que el primero?
Quazi Irfan
Hay pros y contras, pero lo más importante a tener en cuenta con respecto a la velocidad es que todo el código realmente crítico para la velocidad (por ejemplo, las rutinas de representación) está en el intérprete y, por lo tanto, la velocidad del código interpretado no es tan importante. El código interpretado simplemente llama a una función como loadMesh () y el intérprete hace el resto. Es exactamente la misma situación que usar un lenguaje de secuencias de comandos incrustado en un motor de juego; de hecho, hay debates frecuentes en el foro de Blitz3D sobre si es o no un "motor de juego".
jhocking
-1

El flujo del programa, el manejo de variables y similares se compilan en código máquina puro, mientras que los comandos de alto nivel se implementan como funciones de biblioteca C ++ que se llaman desde la biblioteca de tiempo de ejecución compilada en cada ejecutable generado por Blitz. Ninguno de la familia Blitz Basic se interpreta como Python.

Francotirador
fuente
No estoy seguro de lo que quiere decir con "implementado como funciones de la biblioteca C ++ que se llaman desde la biblioteca en tiempo de ejecución", pero eso es solo una forma elegante de decir que el código del usuario es interpretado por el motor central, o simplemente está equivocado. Hace varios años hubo un producto de corta duración llamado CoolBasic que funcionó reemplazando el código de usuario en un Blitz3D exe (se cerró, por supuesto, porque se trataba de pirateo de legalidad cuestionable); eso no habría funcionado si el código del usuario se compilara en el tiempo de ejecución.
jhocking