SKSpriteNode 在 x 和 y 轴上的定位错误
Posted
技术标签:
【中文标题】SKSpriteNode 在 x 和 y 轴上的定位错误【英文标题】:SKSpriteNode has wrong positioning on x and y axis 【发布时间】:2018-02-25 13:31:50 【问题描述】:我已经声明了一个SKSpriteNode
,带有一个支柱图像。图片是 3000 x 50,我已经这样声明了:
var pairs = SKNode()
let pillar = SKSpriteNode(imageNamed: "pillar")
pillar.setScale(0.5)
pillar.physicsBody = SKPhysicsBody(rectangleOf: pillar.size)
pillar.physicsBody?.isDynamic = false
pillar.physicsBody?.affectedByGravity = false
pillar.zPosition = 1
pairs.zPosition = 1
pairs.addChild(pillar)
当我设置柱子的位置时,我会这样做:
bottomWall.position = CGPoint(x: Int(self.frame.width) + 100, y: 0)
我已将 y 设置为 0,但支柱图像大约从 y 轴上的屏幕中间开始,对于 x 轴,Int(self.frame.width) + 100
将支柱定位在距中间 100 像素的位置。
所以我的问题是:
为什么会出现这种行为以及如何使y: 0
开始于y: 0
和x: 0
开始于x: 0
?
【问题讨论】:
【参考方案1】:默认情况下,您的 SKScene 的锚点为 0.5、0.5。这表明对象的默认位置在场景的中心。
如果您希望对象从左下角开始放置,您需要将场景锚点设置为零。在func didMove(to view: SKView)
中设置这个
self.anchorPoint = CGPoint(x: 0, y: 0)
或
self.anchorPoint = CGPoint.zero
【讨论】:
【参考方案2】:对象的position
与对象的中心有关。
为了让x
和y
代表bottomWall
的左下角,您应该设置
bottomWall.anchorPoint = CGPoint(x:0,y:0)
在您定位bottomWall
的行之前
这将使用对象的左下角作为x
和y
相对于屏幕。
【讨论】:
以上是关于SKSpriteNode 在 x 和 y 轴上的定位错误的主要内容,如果未能解决你的问题,请参考以下文章
每年绘制 X 轴上的月份和来自 NetCDF 的 Y 轴上的变量