저는 cocos2D와 Box2D를 사용하여 Mac OS 용 게임을 작성하고 있습니다. 다음과 같이 나는 나의 세계에 b2ContactListener
서브 클래스를 추가했습니다 :Box2D에서 세계의 연락처 수신기 받기
contactListener = new ContactListener();
world->SetContactListener(contactListener);
이 완벽하게 작동하지만, 나는 현재 직접이없는 다른 클래스에서 연락처 리스너에 액세스하는 가장 좋은/접수 방법 확실치 접촉 청취자에 대한 참조.
나는 그것을 필요로하는 다른 클래스에 대한 참조를 전달할 수 있지만 더 좋은 방법이 있는지 궁금한 것이있다. Box2D의에서
world->GetContactListener();
: 나는이 작업을 수행하는 방법을 찾을 수 있지만보다 구체적으로, 어떤이의 상응하는가?
내가 이것을하려고하는 이유는 간단히 말해서 게임 로직 (즉, 몸체가 접촉 청취자의 정보를 기반으로 점프 할 수 있는지 여부)을 관련 클래스 자체로 옮기는 것을 선호하기 때문입니다. 메인 게임 플레이 클래스에서.
감사합니다.
연락처 청취자는 어떤 일이 발생할 때까지 기다리는 것이지만, 직접 물어 보지 마십시오. 아마도 접촉 청취자가 게임 객체에 함수를 호출하여 그들이 만진 다른 객체를 알 수있게 할 수 있습니다. – iforce2d
@ iforce2d 반드시 필요한 것은 아닙니다. 현재 단계에 대한 시뮬레이션이 계산 된 후에 만 box2d 본문 상태를 변경하면 안됩니다. 또한 컨택트 리스너는 현재 시뮬레이션 단계가 완료된 후이를 분석하는 데 사용됩니다. – giorashc
사실이 아닌 것은 무엇입니까? 시간 단계에서 신체 상태를 바꾸어야하는 곳은 어디입니까? 컨택 리스너는 시간 단계에서 호출됩니다. 시간 단계 이후까지 Box2D 세계에서 아무 것도 변경하지 않는 한 사물을 분석 할 수 있습니다. 하지만 원래의 질문으로 돌아가서, 연락 청취자는 BeginContact, EndContact, PreSolve 및 PostSolve의 네 가지 기능에 대한 진입 점 역할을합니다. 일반적으로 멤버 변수가 없기 때문에 아무 것도 얻을 수 없으므로 그 이유는 없습니다. 아마 우리는 존에게 청취자를 얻을 수 있다면 어떻게 할 것인지 물어봐야 할 것입니다. – iforce2d