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

在SpriteKit中构建大型节点网格遇性能瓶颈求助

SpriteKit复刻老演示程序遭遇帧率过低问题

更新:采用bg2b的解决方案已修复问题,最终代码可查看Spriteoscope仓库(还需补充README文档)。

偶然看到一篇关于古老演示程序Kalidescope的文章,这款程序基于64×64像素网格(对应Cromemco Dazzler的原生分辨率),能生成四向万花筒图案,而它的体积居然只有127字节,实在令人惊叹。

出于兴趣,我打算在macOS上用SpriteKit复刻它:创建64×64个尺寸为16×16的SKShapeNode(rectOf...),通过.position属性平铺到SKScene中。运行逻辑很简单——选中一个节点修改颜色,再对沿轴镜像的另外三个节点执行相同的颜色修改操作。

程序能正常运行,但帧率只有2fps,这让我很意外。虽说节点总数不少,但每次循环只修改4个节点的颜色,其余节点完全没操作,甚至仅完成节点创建就出现了帧率过低的问题,相关代码如下:

override func didMove(to view: SKView) {
    let numColumns = 64
    let numRows = 64
    let pixelSize = min(self.size.width / Double(numColumns), self.size.height / Double(numRows))
    
    // 创建一系列SKNode来模拟像素
    for row in 0..<numRows {
      for col in 0..<numColumns {
        // 创建新节点并设置为背景色
        let n = SKShapeNode.init(rectOf: CGSize.init(width: pixelSize, height: pixelSize), cornerRadius:0)
        n.fillColor = NSColor.red
        n.strokeColor = NSColor.black
        
        // 屏幕坐标范围是-size.width/2...size.width/2,转换原始网格坐标
        let xloc = pixelSize * Double(col - (numColumns / 2)) + 8
        let yloc = pixelSize * Double(row - (numRows / 2)) + 8
        n.position = CGPoint.init(x:xloc, y:yloc)
        
        // 添加到场景中
        self.addChild(n)
      }
    }
}

内容的提问来源于stack exchange,提问作者Maury Markowitz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:45:35