2016-04-27 91 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