Member 14968020 Ответов: 2

Как игровые движки выполняют (компилируют) скрипт


i want to build a game engine written by c++ and use C++ in the scripts.
anyway i want to execute a compiled script but how?

how do game engines that use "compiled code" execute compiled script?
do they compile scripts as DLL then call them or what???


Thanks


Что я уже пробовал:

я сделал свой игровой движок 10 раз и потерпел неудачу, потому что не знаю, как он работает
я прочитал книгу под названием "Архитектура игрового движка" и узнал много информации
но я все еще не могу сделать игровой движок

Richard MacCutchan

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

2 Ответов

Рейтинг:
13

Rick York

На самом деле у вас здесь две довольно сложные проблемы. Один из них выполняет код сценария, а другой пишет игровой движок. Я рекомендую заниматься ими отдельно.

Многие игровые движки используют скриптовые языки для логики игры, но очень и очень немногие используют c++ в качестве языка. Я не могу придумать ничего неожиданного. Большинство из них используют один из распространенных скриптовых языков, поскольку средства для их встраивания в приложения довольно распространены. Некоторые используют проприетарные c-подобные языки, потому что для них существует множество библиотек парсеров, которые можно адаптировать. Обычно скриптовый код для игр выполняется интерпретативно, поэтому он не компилируется в машинный код. Если вы не понимаете разницы, то вам предстоит многое узнать и многое прочитать.

If by "compiled code" you mean secondary code compiled into libraries, yes, that is possible but not how games are usually built. A generic game engine is usually used but the engine is in a library and the game itself is the application. This is how most games are built. When games use scripts they are usually loaded at run-time and compiled on the fly to a sequence of "byte code" that can be executed efficiently by an interpreter. This isn't as efficient as machine code but it usually doesn't have to be. Gameplay logic is called when events occur like when a user presses or clicks a button so they don't occur constantly and the code that services the event does not have to be ultra high performance.

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

Чтобы завершить все это, вы должны знать, как работает игровой движок, так как вы читали эту книгу. Следующее, что нужно исследовать, - это то, как работают скриптовые движки и как они встроены в приложения. Затем посмотрите, как игровые движки встраивают скриптовые языки. Это немного более специализировано, чем то, как это делают стандартные приложения.

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


Рейтинг:
1

OriginalGriff

Это очень маленький вопрос, но ..... так же как и "почему радуга?". Ответ на этот вопрос ужасно сложен, слишком сложен для такого маленького текстового поля, как это, - и ответ на ваш тоже!

Как сказал Ришард, написание игрового движка - это большая работа-обычно это проект для большой команды опытных разработчиков, а не для одного кодера, и, честно говоря, я бы даже не пытался сделать это сам (а я был в этой игре десятилетиями!)

Если вы действительно думаете, что хотите написать свой собственный, то начните здесь: как написать игровой движок - поиск Google[^] и пройдите по нескольким ссылкам. Они, по крайней мере, дадут вам представление о масштабе, на который вы смотрите, и предметах, которые вам нужно будет изучить, чтобы начать работу.

Если вы решите продолжить, у вас есть интересный проект, но вам потребуется много времени, чтобы получить "полезные результаты", поэтому постарайтесь не унывать.
Удачи вам!