Подтвердить что ты не робот

Поддерживает ли push-pull FRP при реализации игр?

Я сравнивал только FRP (то есть netwire) с pull-only с push-pull FRP (т.е. реактивный-баннана) в реализации игр. Существуют ли преимущества для одного над другим? Вещи, которые я вижу, следующие:

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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