Языки сценариев игрового движка
Я пытаюсь создать полезный движок для трехмерной игры из движка рендеринга Ogre3d, чтобы смоделировать некоторые из идей, которые я выдвинул и попал на перепутье. Есть несколько языков сценариев, которые доступны, и мне было интересно, были ли один или два, которые были проверены и имели надлежащее следование.
LUA и Squirrel кажутся более проверенными, но я открыт для всех и каждого.
Оптимально было бы лучше, если бы существовала скомпилированная форма для языка для распространения и облегчения загрузки.
9 ответов
Синтаксис - дело вкуса, Lua похож на Javascript, но с фигурными скобками, замененными на Pascal-подобные ключевые слова. Он имеет приятную синтаксическую особенность, заключающуюся в том, что точки с запятой никогда не требуются, но пробел по-прежнему незначителен, так что вы можете даже удалить все разрывы строк и заставить его работать. Как человек, начавший с C, я бы сказал, что Python - это тот, кто имеет эзотерический синтаксис по сравнению со всеми другими языками.
LuaJIT также примерно в 10 раз быстрее Python, а интерпретатор Lua намного меньше (150 КБ или около 15 К строк C, которые вы можете прочитать и понять). Вы можете позволить пользователю создавать сценарии вашей игры без необходимости встраивания массивного языка. С другой стороны, если вы отрываете парсерную часть от Lua, она становится еще меньше.
Один интересный вариант - это stackless-python. Это было использовано в игре Eve-Online.
Руководство по API Python /C длиннее, чем все руководство по Lua (включая API Lua /C).
Другая причина для Lua - встроенная поддержка сопрограмм (совместная многозадачность в одном потоке ОС). Это позволяет иметь около тысячи, казалось бы, отдельных сценариев, которые работают очень быстро рядом друг с другом. Как один сценарий на монстра / оружие или около того.
(Почему люди пишут Lua в верхнем регистре так много на SO? Это "Lua" (см. Здесь).)
Еще один голос за Луа. Небольшой, быстрый, простой в интеграции, что важно для современных консолей - вы можете легко управлять операциями с памятью.
Встраивание переводчика не проблема. Меня больше интересуют функции и производительность на данный момент. Обе интерпретируются как LUA и Squirrel, и это хорошо, потому что одна из игр, которую я создаю, состоит в том, чтобы включить модифицируемый код, в котором есть редактор.
Я хотел бы услышать о питоне, так как я видел его использование в сериале битвы, я верю.
Поскольку это библиотека C++, я бы предложил либо JavaScript, либо Squirrel, последний из которых является моим личным фаворитом из-за того, что он еще ближе к C++, в частности к тому, как он обрабатывает таблицы / структуры и классы. Было бы проще всего привыкнуть к кодеру C++ из-за всех сходств.
Однако, если вы перейдете на JavaScript и найдете версию Ogre3D в формате HTML5, вы сможете перенести код игры прямо в веб-версию с минимальными (если таковые имеются) необходимыми изменениями.
Оба они - хороший выбор, и у обоих есть свои плюсы и минусы, но оба определенно будут просты в освоении, так как вы, вероятно, уже работаете в C++. Если вы работаете с Java, то же самое может сохраняться, и если это Game Maker, вам не понадобится ни один из них, если вы не пытаетесь создать исполняемый файл, для которого людям не понадобится сам Game Maker для запуска, в котором случай, удачи в поиске расширения для запуска любого из них.
Я бы пошел с Lua, так как написание привязок чрезвычайно просто, лицензия очень дружелюбная (MIT) и существующие библиотеки также, как правило, находятся под указанной лицензией. Схему также приятно и легко связать, поэтому она была выбрана, например, для редактора изображений Gimp. Но Луа просто великолепен. World of Warcraft использует его, как очень громкий пример. LuaJIT дает вам скомпилированную производительность. Это меньше, чем на порядок от чистого C.
Python также хорош, потому что он имеет реальные привязки OGRE, на тот случай, если вам нужно изменить что-то более низкое на лету. Я не знаю каких-либо эквивалентных привязок для Луа.
Я бы не рекомендовал LUA, у него особый синтаксис, поэтому к нему нужно время. В зависимости от того, кто будет выполнять сценарии, это может не быть проблемой, но я постараюсь использовать что-то достаточно доступное.
Я бы, наверное, выбрал питона. Обычно он компилируется в байт-код, поэтому вам потребуется встроить интерпретатор. Однако, если вам нужно, вы можете использовать PyPy, например, чтобы перевести код на C, а затем скомпилировать его.