FRP на игровом движке. Стоит ли оно того?

Сегодня я читал о FRP (функциональное реактивное программирование). Тем не менее, я не знаю, насколько это подходит в самом двигателе.

После прочтения статьи Gerold Meisinger мой вопрос заключается в том, стоит ли использовать FRP вместо компонентной архитектуры. Является ли это ближайшим будущим разработки архитектуры игрового движка? Это просто простой подход к решению небольших проблем, основанных на компонентах архитектуры? Я был бы признателен за любую статью, объяснение, личное мнение и т.д.

Подумайте о механизме для коммерческой игры, специально для стрелков или гоночных жанров (3D-игры). Не думайте о двумерном платформере или другом более простом (говоря о сложности двигателя). Я бы использовал C/С++ (я заметил, что люди, использующие FRP, полагаются на Haskell, по своей природе. Однако я видел этот документ и предпочитаю стоять на С++, так как "отраслевой стандарт" ).

Ответы

Ответ 1

С++ не подходит для FRP; любые используемые вами библиотеки (Boost.Phoenix является хорошим) будут нести некоторые накладные расходы, которые вы, скорее всего, не хотите иметь в коммерческих 3D-игра.

Не только это, но FRP - не очень хорошо разработанная техника для игр, даже в Haskell, afaik; вы хотите сделать игру или хотите разработать технику для создания игр?

Системы на основе компонентов основаны на довольно долгое время и являются проверенной концепцией. У них есть свои ограничения, в первую очередь, как компоненты взаимодействуют друг с другом? — одно решение состоит в том, чтобы иметь два типа компонентов, атрибутов и поведения; последний может получить доступ к любому атрибуту, но не может получить доступ друг к другу.

Если вы хотите сделать игру, пойдите с CBS. Если вы хотите помочь в разработке FRP в играх, сделайте это.

Кстати, вы так ошибаетесь, что в 2D-играх есть простые двигатели.:)


Обновление 2014

С тех пор появился новый язык, который широко использует функциональные реактивные методы и нацелен на веб-разработку, называемую Elm. Он очень похож на Haskell и поддерживается Prezi, afaik. У дизайнера языка был довольно хороший presentation, в котором он сделал небольшую игру с использованием FRP. Любой, кто интересуется тем, как FRP должен быть обработан, может захотеть посмотреть на это видео.

Ответ 2

Короткий ответ: возможно, никто из них!

Тем не менее, я не знаю, насколько это вписывается в сам движок.

Я не понимаю, что вы подразумеваете под этим, но каждый кусочный код, который включает время (т.е. использует update( float elapsedTime )), обычно подходит для FRP - теоретически. О "вписываться в двигатель", возможно HaskellWiki Yampa - Game Engine помогает ответить на ваш вопрос (урезанная и переведенная на английский язык версия моей диссертации, объясняет общую архитектуру). Из дискуссий о FRP и чтения некоторых статей FRP представляется, что все еще остаются нерешенными проблемы с общей теоретической концепцией, поэтому я бы рекомендовал провести тщательное тестирование перед использованием любой FRP-библиотеки в коммерческом проекте (особенно производительность и память вопросы). Посмотрите Frag video. Это стрелок, написанный в FRP и самый современный пример сегодня.

Подумайте о механизме для коммерческой игры, специально для стрелков или гоночных жанров (3D-игры).

Хм, в чем ваш фокус? Вы разрабатываете коммерческую игру? Затем используйте существующий движок и не беспокойтесь об этом! Вы разрабатываете двигатель? Тогда FRP может быть интересной концепцией. Различные игровые объекты с компонентами не должны быть нужны для стрелков и гоночных игр, так как они используют только очень мало различных игровых объектов и слишком много внимания уделяют архитектуре, которая может быть чрезмерной. У вас нет фокуса? Получите фокус! Вы не можете разработать следующий движок IdTech и следующую игру Doom самостоятельно.

Я видел этот документ и предпочитаю стоять на С++, как "отраслевой стандарт"

Есть и некоторые библиотеки для С++. Найдите "реактивное или временное программирование".