Ich würde nur eine abstrakte Methode auf den Körper Objekt machen kollidierte genannt:
abstract class Body
{
abstract void Collision(Body other);
}
class Dog : Body
{
public override void Collision(Body other) {
this.Bark();
}
public void Bark() { ... }
}
Dann in Ihrer Kollisionsfunktion auf den betroffenen Stellen nur Kollision nennen.
public bool OnCollision(Body body1, Body body2)
{
body2.Collision(body2);
}
Auf diese Weise jede Art von Körper zu tun, was es braucht, wenn eine Kollision geschieht, könnte man sogar optimiert diese Strecke zu halten, von denen Leichen von Kollisionen mit ihnen notifiziert wurden und reduziert die Anzahl der Funktion, dass Sie Anrufe haben auszuführen:
public bool OnCollision(Body body1, Body body2)
{
// Record that these two objects have been notified of a collision
// then when these same objects are the only two operands in subsequent calls
// you can just short circuit the calls.
if(!AlreadyNotifiedOfCollision(body1, body2))
{
body1.Collision(body2);
body2.Collision(body1);
NotifiedOfCollision(body1, body2);
}
}
natürlich wäre empirische Tests durchgeführt werden müssen, um zu bestätigen, dass diese Prüfung tatsächlich schneller ist als nur zweimal den Anruf zu tun ...
Danke Ich habe das nicht erkannt! Das ist sehr hilfreich. –