Роль языков сценариев в игровом Программировании

Я изменил ответ sussudio. Теперь функция возвращает: (returncode, stdout, stderr, timeout) - stdout и stderr декодируется в строку utf-8

def kill_proc(proc, timeout):
  timeout["value"] = True
  proc.kill()

def run(cmd, timeout_sec):
  proc = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  timeout = {"value": False}
  timer = Timer(timeout_sec, kill_proc, [proc, timeout])
  timer.start()
  stdout, stderr = proc.communicate()
  timer.cancel()
  return proc.returncode, stdout.decode("utf-8"), stderr.decode("utf-8"), timeout["value"]
20
задан BigSandwich 4 March 2009 в 02:51
поделиться

10 ответов

Я думаю, что разработчики должны видеть язык, подходящий для них. Это не является договорным: они должны провести свое время, разрабатывая, не программируя.

, Если сценарии позволяют быструю разработку достойного продукта игрового кода, тогда программисты должны делать его также. Но это должно быть достойно продукта: выполнение всего дважды не экономит время. Таким образом, необходимо продолжать писать сценарий в его месте. Если разработчик может написать сценарий системы материально-технических ресурсов через неделю или записать это в C++ через месяц, то Вы хотите полнофункциональные сценарии, если только дать Вам, больше времени для вручения - оптимизирует части, которые могли бы очевидно поразить пределы производительности. Так не материально-технические ресурсы, или таблица высокого счета, или отображающая ключ система или высокоуровневая игровая логика как то, что символы, как предполагается, делают. Это может все быть задано сценарием, если выполнение так экономит Вам любое время вообще для расходов на ускорение графики и физики: программисты должны быть в состоянии разработать точно, что узкие места, и главные программисты могут сделать разумный прогноз, что не будет.

Разработчики, вероятно, не должны знать или заботиться, используют ли программисты язык сценариев для реализации игрового кода. У них не должно быть мнения, является ли (1) или плох. Таким образом, даже если программисты правы хотеть (1), почему это причиняет беспокойство разработчикам? Как они даже заметили, что язык сценариев полнофункционален, если все, в чем они когда-нибудь нуждаются, справедливо небольшое количество стандартных рецептов? Что-то пошло не так, как надо, но я не думаю, что случается так, что Lua является слишком хорошим языком.

Одна возможность состоит в том, что с помощью того же языка сценариев для обоих, становится препятствием проведению резкой линии между интерфейсами, используемыми разработчиками и интерфейсами, внутренними к игровому коду. Это, как я сказал наверху, не является договорным. Даже если они используют тот же язык сценариев, программисты все еще должны предоставить разработчикам функциональность, что они должны сделать свое задание. Просто, потому что разработчики используют Lua для кодирования стратегий AI и деревьев разговора, и Lua является полнофункциональным языком, способным к записи механизма физики, не означает, что разработчики, как ожидают, запишут свой собственный механизм физики. Или используйте больше чем 10% возможностей Lua.

можно, вероятно, сделать и (1) и (2), возражать. Нет никакой причины, которую Вы не можете привести программистам Lua и разработчикам некоторая миниатюра под-известным DSL, который "компилируется" в Lua со сценарием Lua.

16
ответ дан 29 November 2019 в 22:49
поделиться

compile-link-run-test цикл для скомпилированного C++ кодирует, когда Вы имеете дело с чем-то столь сложным, как видеоигра очень, очень медленная. Используя механизм выполнения сценариев позволяет Вам вносить большие функциональные изменения в игру, не имея необходимость компилировать программу. Это - крупная, крупная экономия времени. Как Вы говорите, вещи, что оптимизация потребности может быть перемещена в C++ как требуется.

механизмы AAA высоко управляются путем сценариев. Крутящий момент, используемый для Племен II (и много других игр!) задан сценарием, Нереален, имеет Unrealscript и так далее. Сценарии не только для модификаций, это является ключевым для эффективной разработки.

18
ответ дан 29 November 2019 в 22:49
поделиться

Как обычно, я думаю, что ответ, "он зависит".

нет НИКАКОГО ПУТИ HALO 3, или Call of Duty 4, возможно, базировался, прежде всего, на сценариях. Заголовки AAA с самым высоким рейтингом, по определению, должны попытаться выйти за границы возможного любой платформы, которой они касаются. Это просто не может быть сделано со сценариями.

Случайные игры, однако, являются другой историей. Главная игра eninges как Единица имеет много встроенных сценариев.

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

Так, существует место для сценариев в играх, но это, вероятно, останется в маленькой/случайной игре и пространстве разработчика модификаций.

3
ответ дан 29 November 2019 в 22:49
поделиться

Я думаю баланс, который Вы хотите, что-то с этой целью: Вы хотите игровую логику в сценарии, но игровой функциональности в коде.

Одно большое большое преимущество сценария состоит в том, что можно настроить, ожидает легко. Например:

враг = GetObjectFromScene ("enemy01"); за 5 секунд {враг. ThrowGrenadeAt (плеер);}

Просто изобретенный пример. Такая логика была бы раздражающей для установки в C++. Сценарий может помочь выразить этот вид логики, но Вы хотели бы фактическую функциональность (функции, которые это вызывает) быть в C++.

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

13
ответ дан 29 November 2019 в 22:49
поделиться

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

Так или иначе, ее действительно невозможные для знания строки между "подходом 1" и "приближаются 2", не зная, где узкие места производительности и чего пользователи собираются больше всего хотеть "написать сценарий".

я предложил бы "подход 3", который должен сделать все это или частично в C++ и представить чистый SDK в C++. Это имело бы преимущество того, чтобы вынуждать Вас написать Ваш код, как будто это был пользовательский интерфейс, который кто-то за пределами Вашей организации должен использовать. Это, надо надеяться, заставило бы это быть более удобным в сопровождении И иметь добавленный побочный эффект реализации Вашего интерфейса сценариев для Вас. Весь Ваш интерфейс сценариев должен был бы сделать, теперь вперед к Вашему SDK. Viola!

С этим подходом Вы избегаете необходимости чертить линию между областью того, что "задано сценарием" по сравнению с тем, что находится в C++. Вы и Ваши пользователи сохраняете выбор или добавить функциональность в C++ с SDK или использовать язык сценариев.

7
ответ дан 29 November 2019 в 22:49
поделиться

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

Двумя из лучших примеров сценариев в играх AAA, которые приходят на ум, является World of Warcraft (использует Lua), и EvE Онлайн (использует Python). Сценарии использования EvE на серверной стороне также: у них есть значительные инвестиции в Stackless Python.

Обновление: Производительность по существу будет надуманным вопросом из-за мультиядер. Даже низкокачественные машины закончатся с большим количеством ядер, чем дисплей и образцовая потребность обновлений. Вы могли бы также потратить одно из тех ядер, выполняющих решение для сценариев для UI.

0
ответ дан 29 November 2019 в 22:49
поделиться

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

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

И после естественно на от этого, надлежащая роль будет зависеть от того, как человеческие ресурсы в Вашей компании размечаются, в сочетании с любыми требованиями к производительности Вашей игры. Как только у Вас есть идея того, сколько людей будет нужен любой вид сценариев, Вы будете знать, сколько из игры потребует его и поэтому может решить, как то, как широкий или сужают интерфейс, должно быть. Это способствует тому, каков 'домен' языка был бы, как упомянуто onebyone.livejournal.com выше.

(Для того, что мало это стоит, я - профессиональный разработчик игр и также модератор форума Языков сценариев по Gamedev.net.)

1
ответ дан 29 November 2019 в 22:49
поделиться

Как был сказан прежде; используйте сценарии для игровой логики и C++ для игровой функциональности. Пример написал бы сценарий игрового режима, но использовал бы C++ для рендеринга.

0
ответ дан 29 November 2019 в 22:49
поделиться

Если мы разделяем игру на две части: механизм и фактическая игра (дизайн).

игровой механизм высшего класса тела А, скорее всего, записан в C/C++, и некоторые люди даже оптимизируют далее с ассемблерным кодом. Можно сделать много аккуратного действительно быстрого материала для графики и физики с определенными инструкциями по ЦП. Нет никакого способа получить производительность при рендеринге больших сред или нескольких сложных объектов от языка сценариев только.

Когда дело доходит до самой игры, где много аспектов, которые могут быть сделаны в медленнее, но высокоуровневые языки программирования. AI и другая игровая логика могут быть записаны в сценарии с успехом. Это может ускорить разработку, и это открывается для модификации и общественных расширений простым способом.

0
ответ дан 29 November 2019 в 22:49
поделиться

Одним из лучших примеров сценариев в действии является IV Цивилизации. Это использует Повышение Python. В результате это ужасно медленно. Ясный контрапункт к оператору, что "код перемещен в C++, когда производительность диктует, что это необходимо".

надлежащий путь состоит в том, чтобы разработать архитектуру fron и решить, какие проблемы в вычислительном отношении трудны и которые сложны для определения впереди. Графика, физика, новаторская, мгновенная обратная связь на входе, тексте к речи - все ясно в вычислительном отношении трудно. "Дружественная или враждебная позиция", "защищают или нападают", "тратят или сохраняют" решения AI типа, является всем комплексом для определения впереди.

заключение состоит в том, что Вы хотите представить способных, но мертвых агентов своему коду сценариев. Код сценариев описывает , что должны сделать агенты, но код C++ заботится о как .

Относительно цикла ссылки компиляции, важно иметь надлежащую модульную архитектуру. Когда Вы работаете над новаторской логикой, Вам никогда не придется компилировать графический код. Кроме того, инструменты как Incredibuild могут помочь ускорить время компиляции. Фирмы большой игры, вероятно, уже имеют систему средств визуализации, которая может согнуть вполне хорошо как ферма компиляции.

3
ответ дан 29 November 2019 в 22:49
поделиться
Другие вопросы по тегам:

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