저는 게임 구현시 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 타입의 문제라고 생각한다.
일부 하스켈 마법사가이 점에 대해 나를 잘못 알았 더라면 좋겠지 만 주위를 둘러 보지는 못합니다. 또한 설명이 훌륭하지 않다면 미안하지만 직접 시도하지 않고서는 이해하기가 쉽지 않습니다.
흥미 롭습니다. 그것들은 서로 호환이 가능한가? 즉, 정보를 하나에서 다른 정보로 옮길 수 있습니까? – Dan
게임 엔진에서 netwire를 사용한 후, 귀하가 진술 한 이유로 그 목적에 매우 적합하다고 말할 수 있습니다. – Dan