Как инструменты «Game Maker», такие как Blitz3D, создают файлы .exe?

8

Существует несколько приложений, таких как Blitz3D или другие виды инструментов для создания игр, которые компилируют скрипты или другие игровые данные в один исполняемый файл. Как они это делают?

user3689
источник

Ответы:

10

Разные инструменты подходят к этому по-разному, но способ, которым Blitz3D делает это, заключается в объединении кода и интерпретатора в пакет. Затем, когда вы запускаете exe, он запускает интерпретатор и передает в комплекте код. Это почти так же, как, скажем, Python работает при использовании py2exe.

Во многих инструментах разработки игр код, который поставляется вместе с исполняемым файлом, является просто необработанным текстом, который интерпретатор анализирует. Однако некоторые используют подход байт-кода, такой как Java, где исходный код превращается в промежуточную форму, которую использует виртуальная машина. Я думаю, что Unity использует этот последний подход, но я не уверен.

Вдобавок ко всему, все инструменты разработки игр, которые я могу себе представить, основаны на том, что исполняемые файлы пакета либо основаны на подходе интерпретатора ядра / виртуальной машины, а затем упаковывают его с кодом, либо представляют собой библиотеки, которые вы компилируете в Visual Studio или как угодно.

jhocking
источник
Второй подход быстрее первого?
Quazi Irfan
Есть плюсы и минусы, но главное, что нужно учитывать в отношении скорости, это то, что весь действительно критичный к скорости код (например, процедуры рендеринга) находится в интерпретаторе, и поэтому скорость интерпретируемого кода не так важна. Интерпретированный код просто вызывает функцию типа loadMesh (), а интерпретатор делает все остальное. Это точно такая же ситуация, как при использовании языка сценариев, встроенного в игровой движок; действительно, на форуме Blitz3D часто идут споры о том, является ли это «игровым движком».
Джоккинг
-1

Поток программы, обработка переменных и т.п. скомпилированы в чистый машинный код, в то время как высокоуровневые команды реализованы как функции библиотеки C ++, которые вызываются из библиотеки времени выполнения, скомпилированной в каждый сгенерированный Blitz исполняемый файл. Не из семейства Blitz Basic интерпретируется как Python.

Снайперская овца
источник
Я не уверен, что вы подразумеваете под «реализованными как библиотечные функции C ++, которые вызываются из библиотеки времени выполнения», но либо это просто причудливый способ сказать, что код пользователя интерпретируется ядром ядра, либо вы просто ошибаетесь. Несколько лет назад появился недолговечный продукт CoolBasic, который работал, заменяя пользовательский код в Blitz3D exe (он был отключен, конечно, потому что это было взломом сомнительной законности); это не сработало бы, если бы код пользователя был скомпилирован во время выполнения.
Джоккинг