SpriteKit与SwiftUI绘制正序带间距圆形金字塔的公式修正问题
解决方案
1. 核心调整思路
- 倒置修正:SpriteKit 坐标系原点在左下角,y轴向上,原代码y值随层级i增大而递增,导致底层显示在顶部,只要反转y的计算逻辑,让顶层i=0的y值最大即可。
- 间距实现:将预定义的spacer变量分别加入横向、纵向的坐标步长计算,即可实现圆形之间的固定间距。
2. 调整后代码
let spacer: Int = 40 let totalLayers = 8 // 对应原代码0...7的8层结构 let yStep = diameter + spacer // 纵向每层的步进长度(包含间距) for i in 0..<totalLayers { let circleCount = i + 1 // 计算当前层总宽度,包含圆形本身和之间的间距 let layerTotalWidth = circleCount * diameter + (circleCount - 1) * spacer // 计算当前层x起始位置,实现金字塔整体居中 let startX = (Int(W) - layerTotalWidth) / 2 // 反转y坐标计算逻辑,层级越高y值越大,显示在上方 let y = Int(side) + (totalLayers - 1 - i) * yStep + radius for j in 0..<circleCount { // 横向步进增加间距,避免左右圆形接触 let x = startX + j * (diameter + spacer) + radius addNode(posX: Double(x), posY: Double(y)) } }
3. 补充说明
如果你的addNode方法的锚点是左上角而非圆心,可以去掉x、y计算末尾加的radius偏移量即可。
内容的提问来源于stack exchange,提问作者benpomeroy9
相关产品推荐
相关产品推荐

