2016-04-06 4 views
1

Ich bekomme diese Fehler und ich weiß nicht, wie Sie sie beheben. Ich mag SKScene mit fester Größe wie diese erstellen:Wie Unterklasse SKScene

width: screenWidth 
height: screenHeight/10 

Ich weiß nicht, wie SKScene in korrekter Weise zu Unterklasse.

enter image description here

Antwort

2

Dies geschieht, wie Sie Eigenschaften sind versucht, zuzugreifen, bevor die Klasse initialisiert hat.

Wenn Sie sich bewegen, dass nach der super.init Linie, es wird beispiels arbeiten .:

... 
super.init(size: fixedSize) 
self.name = name 
self.buttons = buttons 

bearbeiten Ich dachte nur, es gibt eine Ausnahme von dieser obwohl und ich habe gerade bestätigt dies. Spielplatz mag es nicht, sondern eine tatsächliche app tut:

Klasse someclass: NSObject {

let a = 2 
    var b = 3 

    override init(){ 
     let c = self.a 
     let d = self.b 
     super.init() 
     print("c: \(c), d:\(d)") 
    } 

    func foo(){ 
     print("bar \(a)") 
    } 

} 
+0

Ja, blöde Frage. Ich löste bewegende Anweisungen –

+1

Wenn Sie Werte haben, die Sie vor der Init anwenden möchten, dann ist es am besten, die als 'statische Let MyVar = 123' zuweisen –

+0

Ich habe gerade eine Ausnahme zu dem Fall in meiner ursprünglichen Antwort hinzugefügt. Warum der Spielplatz abstürzt, aber die App läuft, habe ich keine Ahnung, aber ich nehme an, das liegt daran, dass die Werte Standardwerte haben. –

0

ich auf diese Weise gelöst:

init(buttons: Button) { 
     self.buttons = buttons 
     super.init() 
     let fixedSize = CGSize.init(width: screenWidth, height: screenHeight/10) 
     super.size = fixedSize 
    } 

I entfernt "name", weil ich don Ich brauche es nicht mehr. Ich bewegte self.buttons = buttons, weil es vor super.init() gesetzt werden muss

+1

In Bezug auf die Verwendung von Bildschirmgrößen etc ... Vergessen Sie nicht, die Skalierung zu verwenden, um sicherzustellen, dass die Netzhaut usw. abgedeckt ist ... 'UIcreen.ainscreen(). Skala' z. Dies behandelt Returns @ 2x @ 3x etc .. Größen. –

+0

So kann ich direkt verwenden: zurück UIScreen.mainScreen(). Bounds.size.height * UIScreen.mainScreen(). Skalieren? Oder ist es überflüssig? –