Вопрос

Я пытаюсь создать полезный движок 3D-игр на основе движка рендеринга Ogre3d для моделирования некоторых идей, которые у меня возникли, и я оказался на распутье.Существует несколько языков сценариев, и мне было интересно, есть ли один или два, которые были проверены и имеют надлежащих последователей.

LUA и Squirrel кажутся более проверенными, но я открыт для всех и каждого.

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

Это было полезно?

Решение

Синтаксис — дело вкуса, Lua похож на Javascript, но с фигурными скобками, замененными ключевыми словами в стиле Паскаля.У него есть приятная синтаксическая особенность: точки с запятой никогда не требуются, но пробелы по-прежнему не имеют значения, поэтому вы можете даже удалить все разрывы строк, и это все равно будет работать.Как человек, начинавший с C, я бы сказал, что Python — это язык с эзотерическим синтаксисом по сравнению со всеми другими языками.

LuaJIT также примерно в 10 раз быстрее Python, а интерпретатор Lua намного меньше (150 КБ или около 15 тысяч строк C, которые вы действительно можете прочитать и понять).Вы можете позволить пользователю создавать скрипты для вашей игры без необходимости встраивания огромного языка.С другой стороны, если вы вырежете часть парсера из Lua, она станет еще меньше.

Другие советы

Один интересный вариант безстековый питон.Это использовалось в игре Eve-Online.

Руководство по Python/C API длиннее, чем весь Руководство по Lua (включая API Lua/C).

Другая причина использования Lua — встроенная поддержка сопрограмм (совместная многозадачность в рамках одного потока ОС).Это позволяет иметь около 1000, казалось бы, отдельных сценариев, которые очень быстро работают рядом друг с другом.Например, по одному сценарию на каждого монстра/оружие или около того.

(Почему люди так часто пишут Lua в верхнем регистре на SO?Это «Луа» (см. здесь). )

Еще один голос за Луа.Маленький, быстрый, простой в интеграции, что немаловажно для современных консолей — вы можете легко контролировать операции с его памятью.

Я бы выбрал Lua, поскольку писать привязки чрезвычайно просто, лицензия очень дружественная (MIT), а существующие библиотеки также, как правило, находятся под этой лицензией.Scheme также удобен и прост в привязке, поэтому он был выбран, например, для редактора изображений Gimp.Но Lua просто великолепен.World of Warcraft использует его как очень яркий пример.LuaJIT обеспечивает производительность, скомпилированную в собственном коде.Его меньше чем на порядок из чистого С.

Я бы не рекомендовал LUA, у него своеобразный синтаксис, поэтому требуется некоторое время, чтобы к нему привыкнуть.В зависимости от того, кто будет писать сценарии, это может не стать проблемой, но я бы попробовал использовать что-нибудь достаточно доступное.

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

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

Мне бы хотелось услышать о питоне, так как я видел его использование в серии Battlefield, я думаю.

Python хорош еще и тем, что у него есть настоящие привязки OGRE, на тот случай, если вам понадобится на лету изменить что-то более низкого уровня.Я не знаю никаких эквивалентных привязок для Lua.

Поскольку это библиотека C++, я бы предложил либо JavaScript, либо Squirrel, причем последний мне больше всего нравится из двух, поскольку он еще ближе к C++, в частности, в том, как он обрабатывает таблицы/структуры и классы.К программисту на C++ было бы проще всего привыкнуть из-за всех сходств.

Однако, если вы воспользуетесь JavaScript и найдете HTML5-версию Ogre3D, вы сможете перенести код игры непосредственно в веб-версию с минимальными (если таковые имеются) необходимыми изменениями.

Оба из них — хороший выбор, и оба имеют свои плюсы и минусы, но оба определенно легче всего изучить, поскольку вы, вероятно, уже работаете на C++.Если вы работаете с Java, то же самое может быть справедливо, и если это Game Maker, вам не понадобится ни один из них, если только вы не пытаетесь создать исполняемый файл, для запуска которого людям не понадобится сам Game Maker, в котором В этом случае удачи в поиске расширения для запуска любого из них.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top