2013-12-16 9 views
25

저는 게임 구현시 pull-only FRP (즉, netwire)와 push-pull FRP (즉, 반응 - bannana)를 비교해 왔습니다. 하나가 다른 것에 이점이 있습니까? 상황이 I했습니다 사항은 다음과 같습니다푸시 풀 FRP는 게임을 구현할 때 도움이됩니까?

  • 푸시 이벤트가 쉽게 마우스 클릭/사용을 netwire GLFW 또는 GLUT
  • Arrowized FRP에서 키 프레스 이벤트를 할 수 있도록 IO 훨씬 적은 항상 더 나은 인 주위에 떠있다 .
  • 마치 마우스 움직임과 같은 것에 응답 만 있으면 시간이 누출 될 수 있습니다.

그 밖의 무엇이 나는 놓쳤는가?

편집, 의견을 모으지 않기 위해 편집 : 주요 목표는 시간 누출없이 가능한 한 표현적이고 간결한 것을 사용하는 것입니다.

업데이트 : Netwire에서 발견 한 큰 문제는 "Fix your Timestep."기사에서 설명한 것처럼 하나 이상의 프레임 속도를 갖는 편리한 방법이없는 것입니다.

업데이트 2 : 내가이 문제를 해결 왔 방법은 내 게임 시뮬레이션 와이어를 만드는 것입니다 알파 값을 사용하고 GL는 알파에 의해 보간 모든 통화를 모두 수행하는 Float -> IO()을 반환합니다. 이상적으로이 "draw 함수"를 MVar을 통해 다른 스레드에 전달하고 해당 스레드에서 실행할 수 있어야합니다. 이봐, 하스켈은 멋지다.

은 업데이트 3 :이 질문을 이후 6 개월 만에, 나는 Netwire 주위를 기반으로 simple rendering engine, 그리고 개념 개발 "엔티티 구성 요소 프로그램을." 이 과정에서 나는 실제로 FRP의 사용이 몹시 도움이되는 것을 발견하지 못했습니다. Wire의 표현력은 실제로 상황에 따라 방해가되는 것으로 나타났습니다. 문제는 객체의 "정체성"을 중심으로 이루어집니다. Wire 유형의 값을 정의 할 때 신원이 없습니다. 즉, 전체 네트워크에서 여러 번 재사용 할 수 있으며 매회 다른 물리적 인 것을 나타낼 수 있습니다. 충돌 감지와 같은 작업을하고 싶을 때 장면 그래프를 탐색 할 방법이 없으면 하나의 불투명 한 와이어에 융합되지 않고 존재할 수 없기 때문에 엄청난 고통입니다. specify exactly 어떤 개체의 속성이 다른 개체와 어떤 방식으로 상호 작용하는지 쉽게 알 수 있기 때문에이 문제는 "장난감"예제에서는 발생하지 않습니다. 나는 이것이 어느 쪽의 FRP 타입의 문제라고 생각한다.

일부 하스켈 마법사가이 점에 대해 나를 잘못 알았 더라면 좋겠지 만 주위를 둘러 보지는 못합니다. 또한 설명이 훌륭하지 않다면 미안하지만 직접 시도하지 않고서는 이해하기가 쉽지 않습니다.

답변

2

내가 읽을 수있는 것에서 herethere, Netwirereactive-banana은 다른 목적과 목표를 가지고 있습니다. Netwire는 게임 서버와 같이 프레임 된 신호를 모델링하는 것을 전문으로합니다. 게임 서버가 일반적으로하는 일은주기적인 프레임으로 클라이언트에 상태를 전송하기 때문입니다. GUI가 순전히 이벤트 중심 모델이며 시간 누설에 대해 관대하지 않으므로 반응 형 바나나가 GUI를 만드는 데 더 나은 선택입니다.

구현하고자하는 측면에 따라 둘 다 사용할 수 있습니다.

+0

흥미 롭습니다. 그것들은 서로 호환이 가능한가? 즉, 정보를 하나에서 다른 정보로 옮길 수 있습니까? – Dan

+0

게임 엔진에서 netwire를 사용한 후, 귀하가 진술 한 이유로 그 목적에 매우 적합하다고 말할 수 있습니다. – Dan