2013-12-16 4 views
25

Я сравнивал только FRP (т. Е. Netwire) с pull-pull FRP (т.е. реактивный баннана) в реализации игр. Существуют ли преимущества для одного над другим? Что я имею уведомления являются:Помогает ли выталкивать FRP при реализации игр?

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

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

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

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

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

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

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

ответ

2

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

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

+0

Интересно. Совместимы ли они друг с другом? I.e., можете ли вы передавать информацию от одного к другому? – Dan

+0

После использования netwire в игровом движке я могу сказать, что он отлично подходит для этой цели по причинам, которые вы указали. – Dan

Смежные вопросы