SpriteKit 坐标搞砸了
SpriteKit coordinates messed up
我正在尝试将精灵添加到我的 SKScene 中,但坐标系似乎很奇怪。 [0, 0] 点位于屏幕中间,而不是应该位于左下角。我不知道这是怎么发生的,因为我尝试使用在类似问题中发现的各种方法进行更正。
这是我的 GameViewController class:
class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if let view = self.view as! SKView? {
if let scene = MenuScene(fileNamed: "MenuScene"){
scene.scaleMode = .aspectFill
view.presentScene(scene)
}
view.ignoresSiblingOrder = true
view.showsFPS = true
view.showsNodeCount = true
}
}
我试过更改scaleMode,它只改变了精灵的比例,并没有解决问题。我还尝试将 MenuScene(fileNamed: ) 更改为 MenuScene(size: view.bounds.size) ,这给了我错误。如果我遗漏任何细节,请询问。
这是因为默认情况下,SKScenes 的锚点为 (0.5, 0.5)。这会将点 (0,0) 置于中心。如果您想将锚点更改为左下角,请将其添加到 didMoveToView 的开头:
self.anchorPoint = CGPoint(x: 0, y: 0)
或者在呈现之前使用该锚点初始化场景(来自 GameViewController):
scene.anchorPoint = CGPoint(x: 0, y: 0)
或者在场景编辑器中修改。
仅供参考:CGPoint(x: 0, y: 0)
与 CGPoint.zero
相同
就个人而言,我发现从中心向外构建场景更容易,因为它更容易对称并且更容易布置 HUD,而不是从角落构建场景,这会导致从角落构建场景,可能会造成困难。
我正在尝试将精灵添加到我的 SKScene 中,但坐标系似乎很奇怪。 [0, 0] 点位于屏幕中间,而不是应该位于左下角。我不知道这是怎么发生的,因为我尝试使用在类似问题中发现的各种方法进行更正。 这是我的 GameViewController class:
class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if let view = self.view as! SKView? {
if let scene = MenuScene(fileNamed: "MenuScene"){
scene.scaleMode = .aspectFill
view.presentScene(scene)
}
view.ignoresSiblingOrder = true
view.showsFPS = true
view.showsNodeCount = true
}
}
我试过更改scaleMode,它只改变了精灵的比例,并没有解决问题。我还尝试将 MenuScene(fileNamed: ) 更改为 MenuScene(size: view.bounds.size) ,这给了我错误。如果我遗漏任何细节,请询问。
这是因为默认情况下,SKScenes 的锚点为 (0.5, 0.5)。这会将点 (0,0) 置于中心。如果您想将锚点更改为左下角,请将其添加到 didMoveToView 的开头:
self.anchorPoint = CGPoint(x: 0, y: 0)
或者在呈现之前使用该锚点初始化场景(来自 GameViewController):
scene.anchorPoint = CGPoint(x: 0, y: 0)
或者在场景编辑器中修改。
仅供参考:CGPoint(x: 0, y: 0)
与 CGPoint.zero
就个人而言,我发现从中心向外构建场景更容易,因为它更容易对称并且更容易布置 HUD,而不是从角落构建场景,这会导致从角落构建场景,可能会造成困难。