Swift SpriteKit:精灵位置不正确

时间:2015-07-07 05:22:24

标签: ios swift sprite-kit skspritenode

我创建了一个新的Xcode游戏项目并选择了SpriteKit。默认情况下,Xcode提供了我修改为添加图像的游戏模板。图像显示在屏幕上但位置不正确。我按照this教程设置了正确的场景尺寸,它可以工作。但是图像仍处于不正确的位置。

我试图将图像定位在Y = 0,但它出现在屏幕的底部而不是顶部。

enter image description here

这是我到目前为止所做的事情。

ViewController代码:

if y % 4 == 0:
    return true
return false

场景代码:

class GameViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()     
}

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews();

    let skView = self.view as! SKView

    println(skView)

    let scale:CGFloat = UIScreen.mainScreen().scale;
    let size = CGSizeMake(skView.frame.size.width*scale, skView.frame.size.height*scale)

    if (skView.scene == nil) {

        if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene    {
            // Configure the view.
            skView.showsFPS = true
            skView.showsNodeCount = true
            skView.ignoresSiblingOrder = true
            scene.scaleMode = .AspectFill
            scene.size = size
            skView.presentScene(scene)
        }
    }
    else {
        skView.scene!.size = size;
    }
}

override func shouldAutorotate() -> Bool {
    return true
}

override func supportedInterfaceOrientations() -> Int {
    if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
        return Int(UIInterfaceOrientationMask.Portrait.rawValue)
    } else {
        return Int(UIInterfaceOrientationMask.All.rawValue)
    }
}
}

4 个答案:

答案 0 :(得分:0)

我认为徽标是底部的红色/绿色框?如果是这样,y = 0是底边,而不是顶边。尝试:

logo.position = CGPoint(x:self.frame.size.width/2, 
                        y:self.frame.size.height - logo.size.height / 2)

答案 1 :(得分:0)

与其他平台的游戏开发不同,spritekit中的y轴从低到高而不是向下运行。在这种情况下,您需要将self替换为self.frame.size.height

logo.position = CGPoint(x:self.frame.size.width/2, y:0) //Your current code
logo.position = CGPoint(x:self.frame.size.width/2, y:self.frame.size.height)//What you want

答案 2 :(得分:0)

由于场景锚点设置为(0,0) - 默认情况下屏幕左下方,我所做的是将锚点设置为(0,1) - 左上角。

self.anchorPoint = CGPointMake(0, 1);

我还为每个孩子设置了相同的锚点,然后我将Y位置设置为负值。

let logo = SKSpriteNode(imageNamed:"imgLogo")
logo.anchorPoint = CGPointMake(0, 1);
logo.position = CGPoint(x:0, y:-180)
self.addChild(logo)

这完美无缺。感谢您的意见。

答案 3 :(得分:0)

为什么y = 0在顶部?把它想象成你在学校学到的图表。 y = 0在底部,x = 0在左侧。所以0,0将位于左下角。