FRP push-pull помогает при реализации игр?

В реализации игр я сравнивал FRP "только по запросу" (то есть по сети) с FRP "по запросу" (то есть с реактивной связью). Есть ли преимущества одного над другим? Вот что я заметил:

  • Push-события позволяют легко получать события для щелчков мыши / нажатий клавиш из GLFW или GLUT
  • Arrowized FRP, который использует сеть, имеет гораздо меньше IO плавать вокруг, что всегда лучше.
  • Похоже, что реакция только на тягу на такие вещи, как движение мыши, может привести к утечке времени.

Что еще я пропустил?

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

Обновление: большая проблема, которую я обнаружил с Netwire, заключается в том, что, похоже, нет удобного способа иметь более одной частоты кадров, как описано в статье "Исправьте свой временной шаг".

Обновление 2: способ, которым я справился, состоит в том, чтобы заставить мой игровой симулятор вернуть Float -> IO () он принимает значение альфа и выполняет все вызовы GL со всем, что интерполируется этой альфа. В идеале я должен быть в состоянии передать эту "функцию рисования" в другой поток через MVar и запустить его в этой теме. Чувак, Хаскелл потрясающий.

Обновление 3: За шесть месяцев с момента постановки этого вопроса я разработал простой движок рендеринга, основанный на Netwire, и концепцию "программирования сущностей и компонентов". В этом процессе я фактически не нашел, что использование FRP было бы очень полезным. Выразительность Wire На самом деле, s оказался препятствием в некоторых обстоятельствах. Проблема сосредоточена вокруг "идентичности" объектов. При определении значения Wire тип, он не имеет идентичности, то есть он может многократно использоваться в общей сети и каждый раз представлять разные физические вещи. Это огромная боль, когда вы хотите сделать что-то вроде обнаружения столкновений, и у вас нет возможности пройти через граф сцены, потому что он не может существовать без слияния в один непрозрачный провод. Эта проблема не возникает в "игрушечных" примерах, поскольку легко указать, какие именно свойства каких объектов взаимодействуют с какими другими объектами и каким образом. Я считаю, что это проблема с любым типом FRP.

Было бы здорово, если бы какой-нибудь волшебник из Хаскелла доказал мне, что я не прав, но я не вижу в этом никакого пути. Также я извиняюсь, если объяснение не велико, но это не так просто понять, не пытаясь сделать это самостоятельно.

1 ответ

Решение

Из того, что я могу прочитать здесь и там, Netwire и реактивный банан имеют разные цели и задачи. NETwire специализируется на моделировании кадровых сигналов, таких как игровой сервер, потому что игровой сервер обычно отправляет свое состояние клиенту в периодических кадрах. Reactive-banana был бы лучшим выбором для создания GUI, потому что GUI - это чисто управляемая событиями модель, которая не терпит утечки времени.

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

Другие вопросы по тегам