erbt. Ich versuche, eine generische Alien
"Blueprint" -Klasse für mein erstes iPhone-Spiel zu schreiben. Diese Klasse enthält eine Handvoll Eigenschaften und Methoden, die von allen Unterklassen von Alien geerbt werden. Das heißt, Alien
sollte eigentlich keine Textur haben und sollte keine eigenen definierten Werte haben.Eine Basisklasse erben, die von SKSpriteNode in Swift
//Generic alien type: a blue-print of sorts
class Alien:SKSpriteNode{
let velocityVector:CGVector
let startPos:CGPoint
init(texture:SKTexture, startPosition startPos:CGPoint,moveSpeed: CGFloat,velocityVector:CGVector){
super.init(texture: texture, color: UIColor.clearColor(), size: texture.size())
self.velocityVector = normalizeVector(velocityVector)
self.position = position
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Jedes Mal, wenn ich versuchen, diese Einrichtung ich in einer Handvoll von Fehlern führen, wie:
"Use of instance member 'normalizeVector' on type GameScene; did you mean to use a value of type GameScene instead?"
normalizeVector
ist eine Funktion, die über der Alien
Klasse geschrieben wird (innerhalb GameScene). Ich bin nicht sicher, was das bedeutet, da dies eine normale Funktion innerhalb des GameScene ist. Wenn ich dieses Stück entfernen, erhalte ich immer noch den Fehler:
"Property self.velocityVector is not initialized at super.init call"
Ich bin verwirrt, weil ich gedacht hatte, dass super.init()
war nur notwendig, weil ich eine Unterklasse von SKSpriteNode machte und dass es nicht zu haben braucht die an die Unterklasse spezifischen Eigenschaften.
Schließlich gibt es eine Möglichkeit, super.init()
ohne eine tatsächliche Textur aufrufen, wie diese Blueprint-Klasse wird nie "angezeigt" werden? Nachdem ich die Apple-Dokumentation über Klassen/Initialisierung durchgelesen habe, bin ich immer noch festgefahren. Jede Hilfe wäre großartig, danke.
Warum definieren Sie 'Alien' in' GameScene'? Eine separate Datei wäre angemessener. –
@appzYourLife Ich habe etwas recherchiert und nicht viel gefunden - sollte ich alle Klassen außerhalb von GameScene schreiben? Wie steht es mit der Spiellogik? – Sam
Es ist eine gute Übung, verschiedene Klassen in verschiedenen Dateien zu schreiben. Bitte lesen Sie auch den [SpriteKit Programmierleitfaden] (https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Introduction/Introduction.html). –