Como ferramentas "criador de jogos" como o Blitz3D criam arquivos .exe?


8

Existem vários aplicativos como o Blitz3D ou outros tipos de ferramentas de construção de jogos que compilam scripts ou outros dados do jogo em um único arquivo executável. Como eles fizeram isso?

Respostas:


10

Diferentes ferramentas abordam isso de maneiras diferentes, mas a maneira como o Blitz3D faz isso é agrupar o código e um intérprete em um pacote. Então, quando você executa o exe, inicia o intérprete e passa o código incluído. É praticamente o mesmo que, digamos, que o Python funcione ao usar o py2exe.

Em muitas ferramentas de desenvolvimento de jogos, o código que acompanha o executável é simplesmente o texto bruto que o intérprete analisa. No entanto, alguns adotam uma abordagem de bytecode como Java, onde o código-fonte é transformado em uma forma intermediária que a máquina virtual usa. Acho que o Unity usa essa última abordagem, mas não tenho certeza.

Em primeiro lugar, todas as ferramentas de desenvolvimento de jogos que eu consigo pensar nos executáveis ​​de pacotes são baseadas nessa abordagem de um interpretador / máquina virtual principal e depois empacotam com o código, ou são bibliotecas que você compila no Visual Studio ou qualquer outra coisa.


A segunda abordagem é mais rápida que a primeira?
Quazi Irfan 11/11

Existem prós e contras, mas o principal a ter em mente com relação à velocidade é que todo o código realmente crítico de velocidade (por exemplo, rotinas de renderização) está no intérprete e, portanto, a velocidade do código interpretado não é tão importante. O código interpretado simplesmente chama uma função como loadMesh () e o intérprete faz o resto. É exatamente a mesma situação que usar uma linguagem de script incorporada em um mecanismo de jogo; de fato, há debates frequentes no fórum do Blitz3D sobre se é ou não um "motor de jogo".
Jhocking 11/10/11

-1

O fluxo do programa, manipulação de variáveis ​​e similares são compilados em código de máquina puro, enquanto os comandos de alto nível são implementados como funções da biblioteca C ++, chamadas a partir da biblioteca de tempo de execução compilada em todos os executáveis ​​gerados pelo Blitz. Não da família Blitz Basic é interpretada como Python.


Não sei ao certo o que você quer dizer com "implementado como funções da biblioteca C ++ que são chamadas a partir da biblioteca de tempo de execução", mas isso é apenas uma maneira elegante de dizer que o código do usuário é interpretado pelo mecanismo principal ou você está simplesmente enganado. Vários anos atrás, havia um produto de curta duração chamado CoolBasic, que funcionava substituindo o código do usuário em um exe do Blitz3D (ele foi desligado, é claro, porque era um hacking de legalidade questionável); isso não funcionaria se o código do usuário fosse compilado no tempo de execução.
Jhocking 17/04
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.