왜 피하고 싶습니까? 재사용 가능한 클래스를 만들려면 순환 종속성을 피해야합니다. 그러나 플레이어는 재사용이 필요한 클래스가 아닙니다. 세계없이 플레이어를 사용하고 싶습니까? 아마 아닙니다.
클래스는 기능 모음에 지나지 않습니다. 문제는 기능을 어떻게 나누는가하는 것입니다. 당신이해야 할 일을하십시오. 순환 퇴폐가 필요한 경우에도 마찬가지입니다. (OOP 기능도 마찬가지입니다. 목적에 맞는 방식으로 코드를 작성하고 패러다임을 맹목적으로 따르지 마십시오.)
편집
질문에 대답하기 위해 콜백을 사용하여 플레이어가 충돌 확인을 위해 월드를 알아야한다는 것을 피할 수 있습니다.
World::checkForCollisions()
{
[...]
foreach(entityA in entityList)
foreach(entityB in entityList)
if([... entityA and entityB have collided ...])
entityA.onCollision(entityB);
}
Player::onCollision(other)
{
[... react on the collision ...]
}
엔터티의 속도를 노출하면 질문에 설명 된 물리의 종류를 세계에서 처리 할 수 있습니다.
World::calculatePhysics()
{
foreach(entityA in entityList)
foreach(entityB in entityList)
{
[... move entityA according to its velocity as far as possible ...]
if([... entityA has collided with the world ...])
entityA.onWorldCollision();
[... calculate the movement of entityB in order to know if A has collided with B ...]
if([... entityA and entityB have collided ...])
entityA.onCollision(entityB);
}
}
그러나 조만간 세계에 대한 의존성이 필요할 것입니다. 즉, 세계의 기능이 필요할 때마다 가장 가까운 적의 위치를 알고 싶습니까? 다음 난간이 얼마나 멀리 떨어져 있는지 알고 싶습니까? 의존성입니다.