2016-04-27 87 views
0

我一直在玩SpriteKit,因爲我想在一年內創建一個遊戲,但我最近以奇怪的形式抓住了一些速度顛簸。iOS SpriteKit座標原點問題

所以這是問題。

我創建了一個普通的SpriteKit項目,並且更改了一些默認代碼。 我添加了一個大小爲20,20(square)的SKNode到位置0,0或CGPointZero。

事情是,我顯示的分辨率是1024x768,如果我在橫向上運行我的應用程序,我無法在0,0點看到我的廣場,我只能看到它,如果我將Y位置設置爲100,

myNode.position = CGPoint(x: 0, y: 100) 

,如果我跑我在縱向模式下的應用程序,Y軸如果固定的,0將在左下角,但我不能再次看到廣場上,除非我把我的X位置到300像

myNode.position = CGPoint(x: 300, y: 0) 

爲什麼我不能簡單地看到0,0位置上的節點,無論我是哪個屏幕方向面對。

這裏去我滿級

import SpriteKit 

class GameScene: SKScene { 

    let myNode = SKSpriteNode() 

    override func didMoveToView(view: SKView) { 

     myNode.size = CGSize(width: 20, height: 20) 
     myNode.position = CGPoint(x: 0, y: 0) 
     myNode.color = UIColor.blackColor() 
     myNode.anchorPoint = CGPointZero 
     myNode.physicsBody = SKPhysicsBody(rectangleOfSize: CGSize(width: 20.0, height: 20.0)) 
     myNode.physicsBody?.affectedByGravity = false 
     myNode.physicsBody?.categoryBitMask = 1 
     myNode.physicsBody?.collisionBitMask = 0 
     myNode.zPosition = 1 
     addChild(myNode) 



    } 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 

     for touch in touches { 
      let moveToY = touch.locationInNode(self).y 
      myNode.runAction(SKAction.moveToY(moveToY, duration: 5)) 
     } 


    } 

    override func update(currentTime: CFTimeInterval) { 
     //print("Position Y: \(self.myNode.position.y)") 
    } 


} 
+1

你期望你的節點在哪裏?默認情況下,場景的原點位於左下角。這與UIKit的區別在於左上角的原點。但是,場景的尺寸很可能比您正在測試的設備大。 – beyowulf

+0

我期望在左下角看到它。無論我使用哪種設備,如何將場景尺寸設置爲屏幕大小?我已經在iPhone 6,iPhone 6 Plus e上測試過,問題仍然存在 –

回答

2

您可以創建和設置viewWillLayoutSubviews()場景大小在您的視圖控制器。

override func viewWillLayoutSubviews() {  
    super.viewWillLayoutSubviews() 
    let skView = self.view as! SKView 
    let scene = YourGameScene(size: self.view.bounds.size) 
    scene.scaleMode = .AspectFill 
    skView.presentScene(scene) 
} 

希望這會有所幫助。
編輯:請勿將場景尺寸設置爲viewDidLoad(),因爲如果手機改變了方向,則視圖尺寸將不正確。將場景尺寸設置爲viewWillLayoutSubviews()可確保根據手機的方向正確調整視圖大小。

+0

Ooohhhh ....就是這樣。我在常規viewDidLoad()中設置其大小,而不是您所說的方法。我會按照你說的方式嘗試,但我相信它會起作用。我會將其設置爲正確的答案。非常感謝;) –

+0

@ user3636256歡迎您。 – TangZijian