提前道歉,因为我不确定究竟是什么问题。我最终试图解决的问题是:
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使用了大量资源,但是,我无法找到相关信息。
答案 0 :(得分:2)
创建SKShapeNodes
效率低下,尝试尽可能少地使用它。相反,创建一个模板形状,并将其转换为SKSpriteNode
。
如果您需要更改尺寸,请使用xScale
和yScale
,如果您需要更改颜色,请使用color
{1}}的<{1}}
如果您需要改变颜色笔划,请将以下代码更改为2 colorBlendFactor
,1 SKSpriteNodes
仅处理填充,1 SKSpriteNode
仅处理填充行程。将笔划精灵作为填充精灵的子项,SKSpriteNode
为zPosition
,并将笔触颜色设置为白色。然后,您可以将0
和color
应用于圈子的子节点以更改颜色。
colorBlendFactor