简单的SpriteKit游戏性能问题 - Swift

时间:2017-11-08 06:40:11

标签: swift sprite-kit cpu-usage skscene

提前道歉,因为我不确定究竟是什么问题。我最终试图解决的问题是:

1)游戏有时会变得迟钝

2)CPU%可以变高,有时高达50-60%,但有时也相对较低(<20%)

3)设备(iPhone 6s)可以稍微温暖

我相信推动这种懒散的是我在SKScene中不断创建和删除圈子。它几乎是不可避免的,因为圈子是游戏的关键元素,我必须不断改变它们的大小和物理身体属性,所以我在重用节点方面做的不多。此外,我几乎不断地移动另一个节点。

func addCircle() {

    let attributes = getTargetAttributes() //sets size, position, and color of the circle


    let target = /*SKShapeNode()*/SKShapeNode(circleOfRadius: attributes.size.width)
    let outerPathRect = CGRect(x: 0, y: 0, width: attributes.size.width * 2, height: attributes.size.width * 2)

    target.position = attributes.position
    target.fillColor = attributes.color
    target.strokeColor = attributes.stroke
    target.lineWidth = 8 * attributes.size.width / 35
    target.physicsBody = SKPhysicsBody(circleOfRadius: attributes.size.width)

    addStandardProperties(node: target, name: "circle", z: 5, contactTest: ContactCategory, category: CircleCategory) //Sets physicsBody properties

    addChild(target)


}

getAttributes()函数成本不高。它确实有一个while循环来设置圆位置,但是在调用函数时它通常不会被使用。否则,这是简单的数学。

其他一些细节:

1)应用程序以120 fps的速度运行。我已经尝试通过在GameScene.swift中添加view.preferredFramesPerSecond = 60并在GameViewController中添加gameScene.preferredFramesPerSecond = 60来设置场景/视图。这些都没有做任何改变fps的事情。通常情况下,当我在其他应用中出现性能问题时,fps会下降,但这并不会发生在这里。

2)我尝试切换SKShapeNode初始值设定项以使用路径与circleOfRadius,然后重置路径。我也尝试过图像,因为我必须重置physicsBody,但似乎没有性能提升。

3)我尝试改变physicsWorld的速度,但这也没什么效果。

4)我还使用了仪器试图找出问题所在。 SKRenderer使用了大量资源,但是,我无法找到相关信息。

1 个答案:

答案 0 :(得分:2)

创建SKShapeNodes效率低下,尝试尽可能少地使用它。相反,创建一个模板形状,并将其转换为SKSpriteNode

如果您需要更改尺寸,请使用xScaleyScale,如果您需要更改颜色,请使用color {1}}的<{1}}

如果您需要改变颜色笔划,请将以下代码更改为2 colorBlendFactor,1 SKSpriteNodes仅处理填充,1 SKSpriteNode仅处理填充行程。将笔划精灵作为填充精灵的子项,SKSpriteNodezPosition,并将笔触颜色设置为白色。然后,您可以将0color应用于圈子的子节点以更改颜色。

colorBlendFactor