Ich habe in den letzten 3-4 Jahren an einigen Hobbyprojekten gearbeitet. Nur einfache 2D- und 3D-Spiele. Aber in letzter Zeit habe ich ein größeres Projekt gestartet. Also, in den letzten Monaten habe ich versucht, eine Spielobjektklasse zu entwerfen, die die Basis aller meiner Spielobjekte sein kann. Nach langem Testen habe ich mich also an Google gewandt, was mich schnell auf einige GDC-PDFs und PowerPoints aufmerksam machte. Und jetzt versuche ich, komponentenbasierte Spielobjekte zu erfassen.
Ich verstehe, dass die Engine ein Spielobjekt erstellt und dann verschiedene Komponenten anfügt, die Dinge wie Gesundheit, Physik, Vernetzung und alles, was Sie dazu bringen, erledigen. Ich verstehe jedoch nicht, wie Komponente X weiß, ob Y den Status des Objekts geändert hat. Zum Beispiel, woher weiß die PhysicsComponent, ob der Spieler am Leben ist, weil die Gesundheit von der HealthComponent kontrolliert wird. Und wie spielt die HealthComponent die "player-died-animation" ab?
Ich hatte den Eindruck, dass es so etwas war (In der HealthComponent):
if(Health < 0) {
AnimationComponent.PlayAnimation("played-died-animation")
}
Aber woher weiß die HealthComponent, dass an das Spielobjekt, an das sie angehängt ist, eine AnimationComponent angehängt ist? Die einzige Lösung, die ich hier sehe, ist
Prüfen Sie, ob eine AnimationComponent angeschlossen ist oder nicht (entweder im Komponentencode oder auf der Engine-Seite).
Haben Sie Komponenten erfordern andere Komponenten, aber das scheint das gesamte Komponentendesign zu bekämpfen.
Schreiben Sie wie HealthWithAnimationComponent, HealthNoAnimationComponent und so weiter, was wiederum die gesamte Idee des Komponentendesigns zu bekämpfen scheint.