我想使用Swift做一個簡單的遊戲。遊戲具有不同的級別,每個級別都要求遊戲的行爲方式略有不同。我決定爲每個級別使用不同的類,這些類都是從基本級別繼承而來的。在Swift類中重寫的可選函數?
這是基礎:
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
}
}
但是,對我來說,這個類似乎很不好寫。我無法在類中創建的任何函數的任何地方被覆蓋,這讓我覺得我做錯了什麼。我應該如何使用擴展或協議來實現可選功能?我不太明白他們是如何工作的,所以迄今爲止我還沒有使用過。
的第二個問題是,這一類需要與遊戲場景變量初始化,因爲有些水平需要它來添加或刪除精靈。考慮到課程是在遊戲場景的文件中創建的,這看起來特別狡猾。
當然有更好的方法嗎?
創建您可以提取共同的功能,以誰的方法給出的默認實現在擴展協議。符合類型可以使用這種默認行爲,或者自己實現它 – Alexander
我寧願有一個(最終)級別的類,我可以實例化具有該方法的對象。 – vikingosegundo
https://en.wikipedia.org/wiki/Composition_over_inheritance – vikingosegundo