Ich versuche ein einfaches Spiel mit Swift zu machen. Das Spiel hat verschiedene Levels und jedes Level erfordert, dass sich das Spiel auf unterschiedliche Weise verhält. Ich entschied mich, für jede Ebene eine andere Klasse zu verwenden, die alle von einer Basisklasse geerbt wurde.Optionale Funktionen zum Überschreiben in Swift-Klassen?
Dies ist die Basis:
import SpriteKit
class LevelBase {
var scene: GameScene! // Seems very dodgy
var blocks = [SKSpriteNode]()
init(scene: GameScene) { // Should this be required init?
self.scene = scene
}
func filterBlock(_ block: SKSpriteNode) {
blocks = blocks.filter() { $0 !== block } // Looks really dodgy to me
}
func update(time: TimeInterval) {
// For override
}
func levelUp() {
// For override
}
func postGenerate() {
// For override
}
}
aber mir diese Klasse scheint geschrieben sehr schlecht werden. Ich kann nirgendwo Beispiele für Funktionen finden, die in einer Klasse erstellt wurden, nur um überschrieben zu werden, was mich denken lässt, dass ich etwas falsch mache. Sollte ich Erweiterungen oder Protokolle für optionale Funktionen wie diese verwenden? Ich verstehe nicht ganz, wie sie funktionieren, also habe ich bisher noch keine benutzt.
Das zweite Problem ist, dass diese Klasse mit der Spielszene Variable initialisiert werden muss, da einige Ebene sie brauchen Sprites hinzuzufügen oder zu entfernen. Dies scheint besonders zweifelhaft, wenn man bedenkt, dass die Klasse in der Datei der Spielszene erstellt wurde.
Sicherlich gibt es einen besseren Weg?
erstellt werden Sie gemeinsame Funktionalität Protokolle extrahieren könnten die Methoden Standardimplementierungen in einer Erweiterung angegeben. Conforming-Typen können dieses Standardverhalten verwenden oder es selbst implementieren – Alexander
Ich hätte lieber eine (letzte) Level-Klasse, die ich mit einem Objekt instanziieren kann, das die fragliche Methode hat. – vikingosegundo
https://en.wikipedia.org/wiki/Composition_over_inheritance – vikingosegundo