2012-05-25 2 views
1

그래서 볼 주위에 드래그 할 수있는 볼 (스프라이트 서브 클래스)을 가지고 있으며 몸체를 업데이트하여 세계에 알려줍니다.물리학 대 그래픽이 서로 싸우는 대 게임 (box2d)

공이 손에 닿은 상태에서 볼에 힘을 가하면 (손가락에 의해 제어 됨) 스프라이트의 시각적 위치를 업데이트하기 위해 서로 싸우는 두 개의 코드가 있습니다.

세계 스테퍼는 물리학을 따라 가면서 볼의 위치를 ​​업데이트하려고합니다. 그러나 터치 방식은 볼의 몸체와 그래픽 위치를 업데이트하려고합니다. 이상적으로, 만졌을 때 볼에 영향을 미치는 모든 물리 현상을 없애고 싶습니다.

그래서 이것을 통합하기 위해 정확히 무엇을해야합니까? 또한 충돌 및 필터링 문제가 발생합니다. 어떤 도움을 주셔서 감사합니다. 감사합니다

+0

터치가 해제되었을 때만 물리를 적용 해보십시오. – CodaFi

답변

1

볼에 정확한 물리 시뮬레이션을 사용 하시겠습니까? 그렇지 않다면 항상 이와 같은 b2body 클래스의 SetTransform 메서드를 사용할 수 있습니다.

CGPoint ballLocation = ;//use the touched location for this 
    b2Vec2 vecBallLocation = b2Vec2(ballLocation.x/32, ballLocation.y/32);//calculate this on your own 
    b2Body * ballBody = ;//replace this variable with your ball's b2Body; 
    ballBody->SetTransform(vecBallLocation, ballBody->GetAngle()); 

볼 스프라이트의 위치를 ​​수동으로 설정하지 마십시오. 이것을 물리 시뮬레이션에 맡기십시오. 수동으로 위치를 설정하는 스프라이트와 물리 시뮬레이션을 사용하여 위치를 업데이트하는 트랙을 추적해야 할 경우 코드가 시간이지나면서 지저분해질 수 있습니다. 이 방법은 훨씬 쉽습니다.

0

피직스 객체가 드래그 될 때 피직스 스텝 시뮬레이션을 실행하기 전에 속도와 각속도를 0,0으로 설정하십시오. 일시적으로 피직스 오브젝트의 위치를 ​​얻은 다음 단계를 밟은 다음 본문의 위치를 ​​다시 설정 한 다음 손가락을 몸에서 움직여 오프셋을 드래그하여 적용하십시오.