【问题标题】:Swift: Spritekit: Switching Scenes (anchor point?)Swift:Spritekit:切换场景(锚点?)
【发布时间】:2017-06-16 19:50:30
【问题描述】:

我想在两个场景之间切换。 在每个场景上都有一个切换到另一个场景的按钮,我希望该按钮位于屏幕中间。 对于第一个场景,这是可行的(我将按钮放在 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(在两个场景中),按钮将首先出现在右上角,然后居中。 任何帮助将不胜感激

【问题讨论】:

  • 第二个场景的代码是什么?
  • 为什么不使用 buttonPlay.position 呢?
  • 第二个场景的代码和第一个相同,但是“Level General”和“GameScene”切换了

标签: swift sprite-kit anchor point scene


【解决方案1】:

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

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

【讨论】:

  • 将采纳您的建议,同时,通过在加载前添加以下行来修复:nextScene.anchorPoint = CGPoint(x: 0.5, y: 0.5)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-13
相关资源
最近更新 更多