Я сравнивал только 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.
Было бы здорово, если бы какой-то волшебник Хаскелла доказал, что я ошибаюсь в этом, но я действительно не вижу пути вокруг него. Также мне очень жаль, если объяснение не очень велико, но на самом деле это не так просто понять, не пытаясь его самостоятельно.
Интересно. Совместимы ли они друг с другом? I.e., можете ли вы передавать информацию от одного к другому? – Dan
После использования netwire в игровом движке я могу сказать, что он отлично подходит для этой цели по причинам, которые вы указали. – Dan