Какой язык игровых сценариев я должен поддерживать?
-
07-07-2019 - |
Вопрос
Игровой скрипт будет управлять логикой NPC / AI.
Если бы я хотел реализовать функцию создания игровых сценариев, какой язык она должна была бы поддерживать?
- JavaScript (встроенная поддержка браузера)
- TCL (интерпретатор на java)
- Lua (Популярные)
- Белка
- Криминалист
- Другое
Имейте в виду, что моя реализация будет работать на нескольких платформах, таких как .net, flash, javascript и java.
Каковы плюсы и минусы перечисленных возможностей?Сколько времени потребуется для внедрения интерпретатора?
Какие функции ищут разработчики игровых сценариев?Что реализуют другие игры?
Я думаю проголосовать за javascript из-за того факта, что каждый может читать и писать на нем.
О чем вы думаете?
Решение
Я бы использовал Lua, потому что его ужасно легко встроить.Встраивание Python оказалось сложным делом, и я на самом деле не стремился к этому.
Это Ссылка может быть полезно в дальнейшем, если вы хотите узнать больше о встраивании Lua и его преимуществах / недостатках.
Другие советы
Используйте Lua. Это прекрасный язык, широко принятый в игровой индустрии.
Для большинства ваших платформ существуют привязки Lua:
- .Net: ЛуаИнтерфейс
- Вспышка: Алхимия Lua
- Java - Язык: Калуа (альтернативная реализация)
Существует также проект llvm-lua, что может быть полезно для переноса Lua на другие платформы.
Что касается JavaScript в качестве хост-платформы...Эта тема постоянно появляется в Список рассылки Lua, но никакого серьезного решения пока опубликовано не было.Если вы действительно нужно разместить Lua в JS, пожалуйста, спросите в списке рассылки Lua, возможно, некоторые люди могли бы поделиться своим опытом по этому вопросу.
Я бы предпочел Python из-за его привязок ко многим языкам.
Я думаю, вы имеете в виду "интегрировать" интерпретатор, а не "реализовать" его.В зависимости от ваших навыков, создание интерпретатора для языка сценариев может занять много времени.
Я точно знаю, что Python и Lua имеют привязки для .NET и Java - вы можете встроить интерпретаторы.Не знаю, существуют ли какие-либо привязки для Javascript и Flash.
Проблема с Python заключается в том, что существует три варианта, все созданные разными людьми.
- IronPython для .NET
- Jython для Java
- и обычный CPython
Я не работал над Jython, поэтому не буду комментировать это.Но есть определенные проблемы с переносимостью между IronPython и CPython.Например:IronPython не поддерживает собственные расширения C.Если есть сценарии, написанные на CPython, которые используют их, вам будет трудно перенести их на IronPython.Кроме того, если скрипты IronPython используют какие-либо .Библиотеки NET, вам будет сложно перенести их на CPython.
Реализации Lua, с другой стороны, берутся из одного места, и я не ожидаю таких проблем.
Это зависит от того, насколько сложным будет ваш код (насколько сложным может стать поведение NPC).Tcl, Lua и JavaScript предназначены для простых задач.Написание больших фрагментов кода на этих языках быстро становится недоступным (особенно для обычных пользователей).
Squirrel использует C-подобный синтаксис, который устроит большинство людей, но как насчет поддержки инструментов?Если вам придется записывать все в Блокнот, это тоже сильно ограничит вас.
Python - это зрелый язык, который прост в освоении (просто сравните "учебник" Lua с тем, который поставляется вместе с Python).Хотя различные версии Python могут показаться пугающими (см. Ответ Рохита), код Python в вашей игре будет одинаковым для всех них.Он поставляется с IDE (IDLE), и есть другие IDE, которые поддерживают Python, который обеспечивает завершение кода, отладку, запуск тестовых примеров и т.д.
Если вы хотите использовать Python, рассмотрите возможность использования Без штабелей поскольку он намного лучше работает с потоками, чем стандартный CPython.Он используется в некоторых MMORPG (EVE Online, IIRC), так что у него есть некоторый послужной список в играх.Кроме того, он очень хорош для продолжений (отчасти по этой причине он был разработан в первую очередь), что является довольно хорошей моделью для логики типа "симуляция", используемой в играх.