iOS SpriteKit协调原点问题

时间:2016-04-27 23:49:45

标签: ios sprite-kit swift2

我一直在玩SpriteKit,因为我想在一年内制作一款游戏,但最近我以一种奇怪的形式发现了一些速度障碍。

所以这就是问题所在。

我创建了一个常规的SpriteKit项目,并且我更改了一些默认代码。 我在位置0,0或CGPointZero中添加了一个大小为20,20(平方)的SKNode。

问题是,我显示的分辨率是1024x768,如果我在横向上运行我的应用程序,我无法在0,0点看到我的方块,我只能看到它,如果我将Y位置设置为100,就像< / p>

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

如果我在纵向模式下运行我的应用程序,Y轴如果固定,0将在左上角,但我再也看不到方形,除非我将X位置设置为300像< / p>

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 个答案:

答案 0 :(得分: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()中设置场景大小可确保根据手机的方向正确调整视图大小。