我不知道这是否是从 Swift 1.2 开始的问题。我对 swift 和 SpriteKit 都很陌生。我正在观看一个在线教程,那里的人可以通过执行以下操作在屏幕的左下角放置一个绿色框:
let greenBox = SKSpriteNode(color: UIColor.greenColor(), size: CGSize(width: 200, height: 200))
let somePoint = CGPointMake(0, 0)
greenBox.position = somePoint
self.addChild(greenBox)
但是,当我尝试同样的操作时,它甚至没有出现在屏幕上!后来我发现屏幕左下角其实是接近(300,10)的东西。为什么会发生这种情况?
此外,我发现 self.frame.size 等于 (1024.0, 768.0),这更令人困惑,因为它与 iPhone6 的尺寸无关。 (不过我是用 iPhone 6 进行测试的。)
我被困在这个问题上。任何帮助将不胜感激,谢谢!
最佳答案
有几件事。首先,确保您的 gameViewController.swift 在 viewDidLoad
函数中包含以下代码:
self.screenSize = skView.frame.size.width
/* Set the scale mode to scale to fit the window */
scene.scaleMode = .AspectFill
scene.size = skView.bounds.size
这将确保您拥有正确的 iPhone 屏幕宽高比和尺寸。
要获取屏幕左下角,您可以使用以下命令:
let somePoint = CGPointMake(CGRectGetMinX(self.frame), CGRectGetMinY(self.frame))
最后,我相信 greenBox 有一个中心 anchor ,因此它将把盒子的中心放在左下角,这意味着大约 75% 的 block 将掉出屏幕。
您可以将 anchor 更改为绿色框的左下角,以确保其完全显示。
greenBox.anchorPoint = CGPointMake(0, 0)
关于Swift 1.2 SpriteKit 坐标系原点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31315509/