在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
相关产品推荐
相关产品推荐

