我剛剛更新到Xcode的7 /斯威夫特2,我碰到這個問題來了,在iPhone模擬器SpriteKit x軸似乎是偏離中心。有人請嘗試此驗證,這是非常簡單的。創建一個新的SpriteKit項目在Xcode 7,並在touchesBegan
方法,在GameScene.swift文件中添加的代碼print(location)
該位正下方let location = touch.locationInNode(self)
。的Xcode 7雪碧套件X座標偏離中心的iOS模擬器
然後在iPhone模擬器運行(任何設備,但我選擇了iPhone 4S),並在視圖中單擊周圍,一邊看輸出結果。 Y軸是在底部零,但X軸似乎是圍繞300的左邊,並且隨着你去的權利。我對此失去了主意!
整個touchesBegan
方法是這樣的:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
/* Called when a touch begins */
for touch in touches {
let location = touch.locationInNode(self)
print(location) // <-- *** ADD THIS LINE ***
let sprite = SKSpriteNode(imageNamed:"Spaceship")
sprite.xScale = 0.5
sprite.yScale = 0.5
sprite.position = location
let action = SKAction.rotateByAngle(CGFloat(M_PI), duration:1)
sprite.runAction(SKAction.repeatActionForever(action))
self.addChild(sprite)
}
}
讓我知道你是否能重現它,爲什麼它正在發生!
這解決了我的問題,但鍋爐板SpriteKit項目模板在'viewDidLoad()'而不是'viewWillLayoutSubviews()''裏面有場景設置代碼。儘管我的一些舊項目在'viewWillLayoutSubviews()'中有。我不確定Xcode是否改變了模板,或者我是否自己改變了它,不記得。但是從Xcode 7.0.1開始,它在'viewDidLoad()'中。但真正的問題是:爲什麼這個片段突然需要使項目模板像過去一樣工作? – mogelbuster
不是。問題出在SpriteKit模板中。當應用程序調用viewDidLoad方法中,skView還沒有添加到主視圖,因此它的尺寸還沒有入店(在'viewDidLoad中()'你甚至無法知道是否skView在橫向或縱向)。但是,如果你設置'viewWillLayoutSubviews內部尺寸()'你剛纔確保skView已經加載到主視圖,現在你可以得到它的尺寸。最後,我敢肯定你的確會改變你以前的模板,因爲它一直都是必要的。 – RoberRM