SpriteKit图片定位异常:如何将SKSpriteNode固定在视图底部中央?
解决SpriteKit节点底部中央定位问题
我来帮你搞定这个定位问题!你现在的核心问题是坐标计算逻辑不对,导致飞船节点没法稳定停在底部中央,咱们一步步修正:
正确的底部中央坐标写法
SpriteKit里节点默认的锚点是(0.5, 0.5)(也就是节点的中心位置),要让节点底部刚好贴住视图底部且水平居中,应该这么写代码:
player = SKSpriteNode(imageNamed: "shuttle") // 水平方向取视图宽度的一半,保证节点中心落在水平中线上 let centerX = self.frame.size.width / 2 // 垂直方向取节点自身高度的一半,这样节点底部刚好对齐视图底部边缘 let bottomY = player.frame.size.height / 2 player.position = CGPoint(x: centerX, y: bottomY) self.addChild(player)
为什么你之前的代码会偏移?
你之前用self.frame.size.width/7作为x坐标,这完全不是水平中线的计算方式——只有当视图宽度刚好是节点宽度7倍时才可能看起来居中,这显然不是通用逻辑。调整随机x/y数值只是碰运气,没法从根本上解决定位问题。
关于负数坐标的说明
其实你根本不需要用负数坐标,除非你想把节点放到视图可见区域之外。只要基于视图尺寸和节点自身尺寸来计算,就能精准定位。如果之后你需要修改锚点(比如把锚点改成(0,0)让节点左下角对齐),再对应调整坐标计算逻辑就好,默认锚点下上面的代码就足够用了。
内容的提问来源于stack exchange,提问作者Drobotjosh
相关产品推荐
相关产品推荐

