Neden bundan kaçınmak istiyorsun? Yeniden kullanılabilir bir sınıf yapmak istiyorsanız, dairesel bağımlılıklardan kaçınılmalıdır. Ancak Oyuncu tekrar kullanılabilir olması gereken bir sınıf değildir. Player'ı hiç bir dünya olmadan kullanmak ister miydiniz? Muhtemelen değil.
Sınıfların işlevsellik koleksiyonlarından başka bir şey olmadığını unutmayın. Asıl soru, işlevselliğin nasıl bölündüğüdür. Ne yapman gerekiyorsa yap. Dairesel bir çöküşe ihtiyacınız varsa, o zaman öyle olsun. (Bu arada herhangi bir OOP özelliği için de geçerli. Bir şeyi bir amaca hizmet edecek şekilde kodlayın, sadece paradigmaları kör bir şekilde takip etmeyin.)
Düzenleme
Tamam, soruyu cevaplamak için: Geri aramaları kullanarak Oyuncunun Dünyayı çarpışma kontrolleri ile tanıştırması gerekebilir.
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 ...]
}
Eğer soruların içinde tanımladığınız fiziğin türü, varlıkların hızını ortaya çıkarırsanız, dünya tarafından ele alınabilir:
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);
}
}
Bununla birlikte, muhtemelen er ya da geç dünyaya bağımlı olmanız gerekeceğini, yani Dünya'nın işlevselliğine ihtiyaç duyduğunuzda: en yakın düşmanın nerede olduğunu bilmek ister misiniz? Bir sonraki çıkıntının ne kadar uzakta olduğunu bilmek ister misin? Bağımlılık öyle.