[英]Where is 0,0 in a GameScene using SpriteKit?
我在将子画面定位到游戏场景中的正确点时遇到问题。 就我阅读的位置, 锚点和spritekit编程指南而言 ,应该清楚0,0位于左下角。 我仅使用横向模式。
但是当我使用我的代码时:
import SpriteKit
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
var ground = createGround()
self.addChild(ground)
}
func createGround()->SKSpriteNode {
var ground = SKSpriteNode(imageNamed: "ground.png")
ground.name = "ground"
ground.anchorPoint = CGPointMake(0, 0)
ground.position = CGPointMake(0, 0)
return ground
}
}
我实现了相当标准的场景:
override func viewDidLoad() {
super.viewDidLoad()
if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
// Configure the view.
let skView = self.view as! SKView
skView.showsFPS = true
skView.showsNodeCount = true
/* Sprite Kit applies additional optimizations to improve rendering performance */
skView.ignoresSiblingOrder = true
/* Set the scale mode to scale to fit the window */
scene.scaleMode = .AspectFill
skView.presentScene(scene)
}
}
结果如下:
我的“ ground.png”尺寸为120x120。 我仔细检查了场景锚点,它位于(0,0),即使我在didMoveToView中将其设置为(0,0),我仍然遇到同样的问题。
不知何故Y因子搞砸了。 当我将地面位置设置为(0,156)时,它直接位于波顿的左上角。 所以看起来游戏场景的y锚点是-36,地面的锚点在左上角而不是左下角。 有什么线索吗?
我发现几乎相同的问题,但框架看起来不错(0.0,0.0,1024.0,768.0)。
Sprite锚点(.5,.5)
表示放置时将通过其中心定位。 因此,如果将其放置在屏幕的左下角,则只会看到图像的上半部分和右半部分。
如果您希望图像能完美地适合左下角,而无需其他数学运算,请将其锚点设置为:
sprite.anchorPoint = CGPointMake(0, 1)
这应该有所帮助。
func createGround()->SKSpriteNode {
var ground = SKSpriteNode(imageNamed: "ground.png")
ground.name = "ground"
// ground.anchorPoint = CGPointMake(0, 0) leave this at .5,.5
ground.position = CGPointMake(ground.size.width/2, ground.size.height/2)
return ground
}
并更改场景比例。
scene.scaleMode = .AspectFit
如果您的场景是1024 x 768并设置为AspectFill,则某些场景将被截断,这会使事情复杂化。 为了获得最佳效果,请将场景大小设置为适合iPhone的大小,但从短期来看,Aspect fit将在屏幕上显示整个场景。 无论哪种方式,您都将被截断,或者出现黑条,直到将场景大小更改为736 x 414(iPhone 6+)为止。
由于默认情况下地面的原点位于中心,场景的原点位于左下角,因此您需要将位置移动到地面的宽度和高度的一半。
希望这会有所帮助并且有意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.