我想要交换两个场景。 在每个场景上都有一个按钮可以切换到另一个场景,我希望按钮位于屏幕中间。 对于第一个场景,这是有效的(我把按钮放在0,0)。但是对于第二个场景,0,0的锚点位于左下方而不是中心位置......奇怪的是,当回到第一个场景时,按钮会出现在按钮左侧,即使它在中心之前!
这里是代码(代码对于两个场景都是相同的,而不是场景名称)
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(在两个场景中),按钮将首先出现在右上角,然后居中。 任何帮助将不胜感激
答案 0 :(得分:1)
这是因为LevelGeneral是使用默认锚点为0.5,0.5和&#34; GameScene&#34;的SKS文件制作的。通过大小为self.size
的代码制作,锚点为0.0,0.0。您应该尝试与加载场景的方式保持一致。
就个人而言,你应该习惯将设计与功能分离的心态。在SpriteKit编辑器中构建所有内容的外观,你永远不必猜测为什么事情没有出现在它们应该的位置(除非某些功能导致它不会出现在它应该的位置)