2014-10-01 53 views
1

我已經寫在斯威夫特一個非常簡單的SKScene不被觸發:initWithSize被觸發在Objective-C,但沒有斯威夫特

override init(size: CGSize) { 
    super.init(size: size) 
    backgroundColor = SKColor.whiteColor() 
    var bg = SKSpriteNode(imageNamed: "myBackground") 
    bg.position = CGPoint(self.size.width/2, self.size.height/2) 

    self.addChild(bg) 
} 

我在Objective-C和嘗試了相同的代碼它被調用時沒有問題,所以我想知道他們是否已經在Swift中用initWithSize改變了某些東西,並且如果我錯過了一些關鍵的東西。

注意:SKScene確實被觸發,只有這個功能沒有。

謝謝!

+0

您需要在初始化程序結束時執行super.init,也許這就是問題所在 – Eugene 2014-10-01 15:41:18

+0

@Eugene但如果我這樣做,Xcode的邏輯告訴我,之前super.init初始化它,它不能設置的東西。 – Julia 2014-10-01 15:50:38

+0

你有什麼錯誤?我已經試過了你的代碼,並且得到了你沒有提供的錯誤:x:和y:CGPoint初始化器的參數,所以我添加了它們並且代碼能夠正常工作。您是否嘗試過設置斷點或打印以查看代碼是否實際未觸發? – Eugene 2014-10-01 16:07:22

回答

0
In **GameViewcontroller** viewDidLoad(), Make sure your calling like this 
    let skView = self.view as SKView 

    let scene = **GameScene.init(size:skView.bounds.size)** 
    skView.showsFPS = true 
    skView.showsNodeCount = true 

    /* Sprite Kit applies additional optimizations to improve rendering performance */ 
    skView.ignoresSiblingOrder = true 

    /* Set the scale mode to scale to fit the window */ 
    scene.scaleMode = .AspectFill 

    skView.presentScene(scene) 


**GameScene.swift** 

**init(size: CGSize)** is parameterized constructor. So you have to call it manually. 

override init(size: CGSize) { 
super.init(size: size) 
backgroundColor = SKColor.whiteColor() 
var bg = SKSpriteNode(imageNamed: "myBackground") 
bg.position = CGPoint(x: self.size.width/2, y: self.size.height/2) 

self.addChild(bg) 
} 

required init?(coder aDecoder: NSCoder) { 
super.init(coder: aDecoder) 
}