iPhone 6+上的SpriteKit性能不佳

Kyl*_*cot 1 iphone performance ios sprite-kit swift

我正在尝试编写一个SpriteKit游戏,但很快就遇到了问题.正如您在下面看到的,我在屏幕上绘制了~350个简单节点.这在我的iPhone 6+上产生~25fps.

基本上我只是创建Section对象(这是一个SKNode),在每个循环20次并添加单个块的内部.块慢慢向上移动到屏幕上.我不确定从哪里开始调试这个或代码的哪一部分来显示所以这里是附加块的Section类的摘录:

for i in 1...20 {
            let left = SKShapeNode(rectOfSize: CGSize(width: n, height: n))
            left.fillColor = randomColor()
            left.physicsBody = SKPhysicsBody(rectangleOfSize: CGSize(width: n - 1, height: n - 1))
            left.physicsBody?.dynamic = false


            left.position.x = (CGFloat(i) * n) - (size.width/2 + n/2)
            row.addChild(left)
            cubes.append(left)
        }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Lea*_*s2D 8

你的节点都是skshapenodes.每个形状节点都会生成一个新的绘制调用,这就是为什么你在该场景中有368个绘图 - 即使在最新的手机上也是如此.

我认为SkShapeNode从来没有打算作为游戏构建节点,而是可以通过它来可视化调试信息.人们不应仅仅因为效率非常低而建立一个主要基于或依赖于形状节点的游戏.

相反,使用具有实际纹理的精灵,你会看到更好的性能.如果屏幕截图代表游戏的图形,则只需要将白色方形图像作为纹理,然后更改单个精灵的颜色属性以对其进行着色.