2015-10-05 62 views
0

我剛剛更新到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) 
    } 
} 

讓我知道你是否能重現它,爲什麼它正在發生!

回答

1

請找GameViewController.swift,找到的代碼下一塊後:

if let scene = GameScene(fileNamed:"GameScene") { 
    // Configure the view. 
    let skView = self.view as! SKView 
    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) 
} 

所以你必須添加:

scene.scaleMode = .AspectFill 

行後
scene.size = UIScreen.mainScreen().bounds.size 

這將解決您的問題。 希望它有幫助

1

嘗試在GameViewController的viewWillLayoutSubviews()方法添加下面一行:

scene.size = skView.bounds.size 

我行scene.scaleMode = .AspectFill之前添加它。這是否解決了這個問題?

+0

這解決了我的問題,但鍋爐板SpriteKit項目模板在'viewDidLoad()'而不是'viewWillLayoutSubviews()''裏面有場景設置代碼。儘管我的一些舊項目在'viewWillLayoutSubviews()'中有。我不確定Xcode是否改變了模板,或者我是否自己改變了它,不記得。但是從Xcode 7.0.1開始,它在'viewDidLoad()'中。但真正的問題是:爲什麼這個片段突然需要使項目模板像過去一樣工作? – mogelbuster

+1

不是。問題出在SpriteKit模板中。當應用程序調用viewDidLoad方法中,skView還沒有添加到主視圖,因此它的尺寸還沒有入店(在'viewDidLoad中()'你甚至無法知道是否skView在橫向或縱向)。但是,如果你設置'viewWillLayoutSubviews內部尺寸()'你剛纔確保skView已經加載到主視圖,現在你可以得到它的尺寸。最後,我敢肯定你的確會改變你以前的模板,因爲它一直都是必要的。 – RoberRM