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: 0x: 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 与对象的中心有关。 为了让xy 代表bottomWall 的左下角,您应该设置

bottomWall.anchorPoint = CGPoint(x:0,y:0)

在您定位bottomWall的行之前

这将使用对象的左下角作为xy 相对于屏幕。

【讨论】:

以上是关于SKSpriteNode 在 x 和 y 轴上的定位错误的主要内容,如果未能解决你的问题,请参考以下文章

每年绘制 X 轴上的月份和来自 NetCDF 的 Y 轴上的变量

在 X 和 Y 轴上的 HTML 表格滚动功能

在 SKScene 中间保留一个物理体?

如何使用 y 轴上的百分比和 x 轴上的每个指标来绘制性能百分比?

THREE.js如何实现在x,y,z轴上的拖拽

移动节点后,SKSpriteNode的X,Y坐标不会更改