In che modo strumenti "game maker" come Blitz3D creano file .exe?


8

Esistono diverse applicazioni come Blitz3D o altri tipi di strumenti per la costruzione di giochi che compilano script o altri dati di gioco in un singolo file eseguibile. Come lo fanno?

Risposte:


10

Strumenti diversi lo affrontano in modi diversi, ma il modo in cui Blitz3D lo fa è racchiudere il codice e un interprete in un pacchetto. Quindi quando esegui l'exe, questo avvia l'interprete e passa il codice in bundle. È praticamente lo stesso di come, diciamo, Python funziona quando si usa py2exe.

In molti strumenti di sviluppo del gioco, il codice in bundle con l'eseguibile è semplicemente un testo non elaborato analizzato dall'interprete. Tuttavia alcuni adottano un approccio bytecode come Java, in cui il codice sorgente viene trasformato in una forma intermedia utilizzata dalla macchina virtuale. Penso che Unity usi quest'ultimo approccio ma non ne sono sicuro.

Dall'alto della mia testa tutti gli strumenti di sviluppo del gioco che mi viene in mente che gli eseguibili del pacchetto sono basati su questo approccio di un interprete principale / macchina virtuale e quindi impacchettati con il codice, o sono librerie compilate in Visual Studio o altro.


Il secondo approccio è più veloce del primo?
Quazi Irfan,

Ci sono pro e contro, ma la cosa principale da tenere a mente per quanto riguarda la velocità è che tutto il codice veramente critico (ad es. Le routine di rendering) è nell'interprete e quindi la velocità del codice interpretato non è così importante. Il codice interpretato chiama semplicemente una funzione come loadMesh () e l'interprete fa il resto. È esattamente la stessa situazione dell'uso di un linguaggio di scripting incorporato in un motore di gioco; infatti, ci sono frequenti dibattiti sul forum di Blitz3D sull'opportunità o meno di essere un "motore di gioco".
jhocking

-1

Il flusso di programma, la gestione variabile e simili sono compilati in puro codice macchina, mentre i comandi di alto livello sono implementati come funzioni di libreria C ++ che vengono chiamate dalla libreria di runtime compilata in ogni eseguibile generato da Blitz. Non appartenente alla famiglia Blitz Basic viene interpretato come Python.


Non sono sicuro di cosa intendi per "implementato come funzioni di libreria C ++ che vengono chiamate dalla libreria di runtime", ma o questo è solo un modo elegante per dire che il codice dell'utente viene interpretato dal motore principale, oppure ti sbagli semplicemente. Diversi anni fa c'era un prodotto di breve durata chiamato CoolBasic che funzionava sostituendo il codice utente in un ex Blitz3D (era stato chiuso naturalmente perché si trattava di un hacking di discutibile legalità); che non avrebbe funzionato se il codice dell'utente fosse stato compilato nel runtime.
jhocking
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.