Wir sind fast fertig mit dieser Serie zur objektorientierten Programmierung. In diesem Artikel werden wir das OOP-Prinzip von Abstraktion - das heißt, ein Objekt verallgemeinern - und seine Verwendung in der Spielentwicklung.
Hinweis: Obwohl dieses Tutorial mit Java geschrieben wurde, sollten Sie in der Lage sein, in fast jeder Spieleentwicklungsumgebung dieselben Techniken und Konzepte anzuwenden.
Abstraktion ist das Prinzip der Verallgemeinerung. Dies erfordert, dass wir uns von einer bestimmten Instanz zu einem allgemeineren Konzept bewegen, indem wir über die grundlegendsten Informationen und Funktionen eines Objekts nachdenken.
Das hört sich vielleicht etwas seltsam an, aber das Konzept der Abstraktion ist uns bereits bekannt. Wenn ich beispielsweise das Wort "Auto" sage, woran denken Sie? Wahrscheinlich haben wir nicht über dasselbe Auto nachgedacht. Ich habe über einen schwarzen Mustang Boss 302 nachgedacht, der eine bestimmte Instanz eines Autos ist. Keiner von uns hat sich wegen des Wortes geirrt Auto ist ein sehr allgemeines Konzept eines Fahrzeugs, das wir für den Transport (oder für die Erholung in meinem Fall) verwenden..
Gleiches gilt für Videospiele. Videospiele werden in Gruppen wie RTS, RPG, Racing usw. kategorisiert. Diese Gruppen sind alles allgemeine Konzepte, die das Gameplay eines Spiels beschreiben. StarCraft II, Elder Scrolls V: Skyrim und Need for Speed sind spezifische Fälle dieser verallgemeinerten Konzepte.
Daher erfordert die Abstraktion viele spezifische Instanzen von Objekten und extrahiert ihre allgemeinen Informationen und Funktionen, um ein einziges verallgemeinertes Konzept zu erstellen, das verwendet werden kann, um alle spezifischen Instanzen als ein einziges zu beschreiben.
Abstraktion ist hilfreich, weil sie alles auf die grundlegendsten Prinzipien reduziert. Dies kann beim Einkapseln der Funktionalität eines Objekts hilfreich sein, da so die wichtigen Informationen, die sichtbar gemacht werden sollen, und die unwichtigen Informationen, die ausgeblendet werden können, identifiziert werden können.
Abstraktion hilft auch beim Prinzip "Nicht wiederholen". Indem wir das, was eine Gruppe von Objekten gemeinsam hat, zusammenfassen und abstrahieren, können wir dazu beitragen, redundanten Code in jedem Objekt zu verhindern, der wiederum mehr wartbaren Code erzeugt.
Nutzen Sie unsere drei Spiele, um einige konkrete Beispiele dieses Prinzips in Aktion zu sehen.
Wenn Sie mit der Abstraktion von Asteroiden beginnen möchten, müssen Sie über die Objekte nachdenken. Denken Sie daran, dass die Gegenstände für Asteroiden ein Schiff, ein Asteroid, eine fliegende Untertasse und eine Kugel waren. Denken Sie jetzt darüber nach, was jedes dieser Objekte gemeinsam hat. Teilen sie Zustände, Verhaltensweisen oder Funktionen? Indem wir diese gemeinsamen Elemente verwenden, die alle Objekte gemeinsam haben, können wir diese Elemente in eine allgemeinere Klasse abstrahieren.
Zum Beispiel würden ein Schiff, ein Asteroid, eine fliegende Untertasse und eine Kugel alle das gleiche Verhalten haben, um sich über den Bildschirm zu bewegen. Sie können dieses Verhalten in eine abstrakte Klasse abstrahieren, die die allgemeinen Eigenschaften enthält, die zum Verschieben eines Objekts erforderlich sind. Diese Qualitäten wären Zustände wie Position und Geschwindigkeit, und das Verhalten von ziehen um.
Die abstrahierte Klasse in Java könnte folgendermaßen aussehen:
/ ** * Abstrakte Klasse zum Bewegen * / Abstrakte Klasse Movable public float velocityX; öffentliches Float VelocityY; öffentliche FloatpositionX; öffentliche FloatpositionY; / ** * Funktion - führt das Verhalten (Aufgabe) des Verschiebens des Schiffes aus * / public void move () positionX + = VelocityX; PositionY + = GeschwindigkeitY;
Es gibt andere allgemeine Zustände, Verhaltensweisen und Funktionen, die alle Objekte gemeinsam haben. Kannst du an sie denken? Diese können alle zu einer abstrakten Klasse hinzugefügt werden.
Eine Sache, auf die Sie achten sollten, ist das Erstellen einer Blob-Klasse. Eine Blob-Klasse ist eine Klasse, die versucht, alles aus einer Gruppe von Objekten zu behandeln, selbst wenn nicht jedes Objekt die gleichen Zustände, Verhaltensweisen und Funktionen besitzt. Nur weil ein Schiff und eine fliegende Untertasse schießen können, bedeutet das nicht, dass Sie dieses Verhalten in dieselbe abstrakte Klasse einordnen sollten, in der alle vier Objekte beschrieben werden.
In Iain Lobbs Tutorial zur Entity-Komposition erfahren Sie, wie er diese Situation vermeidet.
Wie schon oft erwähnt, hat Tetris nur ein Objekt, ein Tetrimino. Dies hindert Tetris jedoch nicht daran, einen Teil seiner Funktionalität abzugrenzen. Ein Tetrimino wird fast genauso gezeichnet wie das Spielfeld und die anderen Spielbilder. Das bedeutet, dass Sie dieses Zeichenverhalten in eine einzige Klasse zusammenfassen könnten, zu der alle auf dem Bildschirm gezeichneten Elemente gehören.
(Persönlich möchte ich eine solche Klasse nennen Zeichenbar
, aber Sprite
ist auch ein häufig verwendeter Name.)
Pac-Man ist in Bezug auf Abstraktion etwas interessanter. Pac-Man, ein Geist und ein Pac-Punkt haben eigentlich keine gemeinsamen Zustände, Verhaltensweisen oder Funktionen. Sie können auf ähnliche Weise auf den Bildschirm gezeichnet werden, sodass eine abstrakte Klasse für das Zeichnen von Zeichnungen erstellt werden kann, jedoch nicht viel mehr. Also, was machst du? In diesem Fall können Sie mehrere abstrakte Klassen erstellen, um den Code zu organisieren.
Beginnen Sie mit der Klasse, um die Zeichnung für alle drei Objekte zu handhaben. Als nächstes nehmen Sie den Pac-Punkt aus der Gruppe, da es das Objekt ist, das wirklich nicht zu den anderen gehört. Das lässt Pac-Man und einen Geist übrig. Überlegen Sie nun, was diese beiden Objekte gemeinsam haben, und erstellen Sie eine weitere abstrakte Klasse für diese Objekte. Diese Klasse könnte Zustände wie enthalten Richtung und Geschwindigkeit, und das Verhalten von ziehen um.
Mit zwei abstrakten Klassen reduzieren Sie den redundanten Code, der zum Erstellen der drei Objekte erforderlich gewesen wäre, und verschieben ihn an einen Ort, der leicht geändert und geändert werden kann.
Das Prinzip von Abstraktion hilft, redundanten Code zu reduzieren und mehr wartbaren Code zu erstellen. Die Abstraktion an sich bewirkt jedoch nichts, wenn wir mit den abstrahierten Klassen tatsächlich nichts anfangen. Dafür müssen wir etwas lernen Erbe welche im nächsten und letzten Artikel dieser Serie besprochen werden.
Folgen Sie uns auf Twitter, Facebook oder Google+, um über die neuesten Beiträge auf dem Laufenden zu bleiben.