@Hocksten

Как игровые движки компилируют код?

Заинтересовался вопросом как создаются игровые движки, а конкретно - как они собирают проект и получают exe файл?
  • Вопрос задан
  • 1603 просмотра
Пригласить эксперта
Ответы на вопрос 4
Nipheris
@Nipheris Куратор тега C++
Вы явно путаете жужжащих мух с теплыми котлетами. Игровые движки создаются разработчиками, также же как и любые другие приложения. Если это игровой движок в классическом понимании (нативный, на D3D или OpenGL) - то это нативное приложение, для создания которого применяются в общем-то обычные хорошо известные инструменты: язык программирования и его тулчейн (компилятор+линковщик) - это минимум, а там уже у кого как - IDE (одну из которых вы упомянули в тегах), просто редактор типа sublime и т.д.
exe-файл, как и любой другой модуль на любой платформе (PE(exe, dll) на винде, ELF (бинарник/so) на линухе и т.д.) - это результат работы линковщика. Линковщик собирает сгенеренные компилятором объектные файлы и другие библиотеки в такой модуль, объектные файлы генерятся компилятором из исходного кода, исходный код пишут разработчики.
Для Microsoft Word, Half-Life и KDE в общем и целом этот процесс - одинаковый. Разница только в инструментах, платформах и мелочах.
Смысл вопроса из заголовка - "как ДВИЖКИ компилируют код?" я так и не понял, если вы имеете в виду скрипты, которые можно выполнять средствами движка - это другая история, многие серьезные двиги используют интепретаторы существующих скриптовых языков (Lua например весьма популярен) или пишут свой для реализации на этом скриптовом языке игровой логики, интерфейсных плагинов (в WoW так делают), ну и так далее.
P.S. Если уж упомянули в тегах студию, поставьте её, создайте простейший консольный проект (Win32 Console Application), скомпильте и запустите - и вы выполните всю ту цепочку, которую выполняют разработчики нативных приложений (только она у них может быть сложнее, кастомизирована под их нужды, и в их проектах не 2 cpp-файла, а 10 тысяч).
Ответ написан
Комментировать
@JustSokol
newby programmer
движок по простому это программа обычная, они ничего не компилируют
движок, если провести аналогию к ентерпрайз разрабокам, - это информационная система, где бизнес-логика это механика, правила игры и внутренние информационные процессы, а интерфейс,отображение и вывод - визуализация которая выводится на экран + различные файлы настроек и сохранения (если говорим про оффлайн игры).

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

более коротко и просто - движок это программа, которая реализует и согласует все действия которые необходимы для игры (и графика, и внутренняя логика, и физика, и кеши для оптимизации, менюшки все, интерфейсы, какие-то вспомогательные вещи (ачивки например) - в общем все что относится к игре)

чем движок отличается от самой игры? тем что он изначально разрабатывается так чтобы на его основе можно было делать разные игры и/или делать разнообразные моды. то есть он изначально включает в себя большое разнообразие - а конкретная игра на его основе это движок + его нужная конфигурация, ну и плюс в конфигурацию наверное можно включить и набор текстур,моделей и прочих вспомогательных фалйов

если интересуетесь то лучше начните с общих моментов game development а далее можете скачать исходники игры doom 3 и покопаться в них (при этом найдя какуюто статью про эти исходники/игру/движок, скорее всего на английском)
Ответ написан
Комментировать
S-ed
@S-ed
Комбайнёр
Движки которые используют Статические языки (требуют компиляции, C++, C#, Java), практически всегда используют уже готовые решения (не являются самодостаточными):
Unreal Engine - C++ - На Windows использует C# для генерации проекта и компилятор MSVC (Visual Studio); На Linux - cmake, clang
Unity - С# - Использует mono
CryEngine - C++ - MSVC (Visual Studio)
Torque 3D - C++ - MSVC (Visual Studio)
WaveEngine - C#, F#, VB - csc (Visual Studio), mono
В таких случаях всегда указаны "Prerequisites"
Для удобства, во многие среды разработки уже внедрены инструменты для автоматизации процессов компиляции. К примеру, UE4 может динамически обновлять библиотеки dll (Hot Reload).

Движки с динамическими языками (не компилируются или компилируются "на лету", Python, JS, AS3, Lua), по сути, не собирают никаких exe/dll:
Unity - JS (только упакует ресурсы)
Phaser.io - JS
CryEngine - Lua (только упакует ресурсы)
pyGame - Python
Ren'Py - Python

Существуют движки, SDK которых представлена на многих языках - Live2D Cubism (C++, C#, AS3, JS, Java), Box2D (C++, Python, Java, AS3). Соответственно подход в каждом случае будет разный.
Ответ написан
Комментировать
@Hocksten Автор вопроса
Прошу прощения, может не так выразился. Суть в том, что движек не для одной игры. Вопрос заключался в том, как вынести игру отдельно от движка(например по кнопке сохранить, игра сохраняется в некую папку, отдельную от движка)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы