Swift:Spritekit:切换场景(锚点?)

时间:2017-06-16 19:50:31

标签: swift sprite-kit anchor point scene

我想要交换两个场景。 在每个场景上都有一个按钮可以切换到另一个场景,我希望按钮位于屏幕中间。 对于第一个场景,这是有效的(我把按钮放在0,0)。但是对于第二个场景,0,0的锚点位于左下方而不是中心位置......奇怪的是,当回到第一个场景时,按钮会出现在按钮左侧,即使它在中心之前!

  • 场景1:按钮居中
  • 场景2:按钮@bottom left
  • 场景1:按钮@bottom left
  • 场景2:按钮@bottom left
  • 场景1:按钮@bottom left
  • 等。

这里是代码(代码对于两个场景都是相同的,而不是场景名称)

class LevelGeneral: SKScene {
    var buttonplay = SKSpriteNode()

    override func didMove(to view: SKView) {

        buttonplay = SKSpriteNode(imageNamed: "button1")
        buttonplay.size = CGSize(width: self.frame.width/2, height: self.frame.height/8)
        buttonplay.position = CGPoint(x: 0, y: 0)
        self.addChild(buttonplay)

    }
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        for touch in touches {
            let location = touch.location(in: self)
            if buttonplay.contains(location) {
                let nextScene = GameScene(size: self.size)
                let reveal = SKTransition.fade(withDuration: 0.1)
                self.view?.presentScene(nextScene,transition: reveal)
            }
        }
    }
}

如果我将按钮位置更改为screenwidth / 2,screenheight / 2(在两个场景中),按钮将首先出现在右上角,然后居中。 任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

这是因为LevelGeneral是使用默认锚点为0.5,0.5和&#34; GameScene&#34;的SKS文件制作的。通过大小为self.size的代码制作,锚点为0.0,0.0。您应该尝试与加载场景的方式保持一致。

就个人而言,你应该习惯将设计与功能分离的心态。在SpriteKit编辑器中构建所有内容的外观,你永远不必猜测为什么事情没有出现在它们应该的位置(除非某些功能导致它不会出现在它应该的位置)