私は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