You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:54:08