我是SpriteKit的新手,我正在遵循一个教程,该教程在纵向模式下将SpritekitNode定位在屏幕底部附近的中心,但无论我使用什么代码,我的对象都不会假设在教程。我已经看了几个其他的教程,关于定位SpriteKitNode的代码它们几乎是一样的。
这是我在GameScene.swift中唯一的代码:
import SpriteKit
import GameplayKit
class GameScene: SKScene {
var player:SKSpriteNode!
override func didMove(to view: SKView) {
player = SKSpriteNode(imageNamed: "Spaceship")
player.xScale = 0.5
player.yScale = 0.5
player.position = CGPoint(x: self.frame.size.width / 2, y: player.size.height / 2 + 20)
self.addChild(player)
}
override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered
}
}
我没有向GameScene.sks添加任何内容或使用上面的代码对info.plist进行任何更改,mySpriteKitNode显示在屏幕的右侧中心,如下图所示。宇宙飞船应位于红色X附近。
我已经看了几篇关于在SpriteKit中定位的问题,但还没有找到解决方案。
如果有人能解释我到底做错了什么?感谢
答案 0 :(得分:4)
这种情况正在发生,因为你所关注的教程可能已经过时了。之前,当从sks
文件加载场景时,它将anchorPoint
设置为0,0。现在,默认设置为0.5,0.5。
因此,您既可以使用当前代码,又可以将场景的锚点设置为0.0,0.0,或者保留场景的anchorPoint
,并设置播放器position
{{相应的1}}属性:
//player.position.x should be 0 which is middle of the screen
player.position.y = -frame.size.height / 2.0 + player.size.height/2.0 + 20.0