私は正しい質問が何であるか正確にはわからないので、事前に謝罪してください。私は最終的にはアドレスにしようとしている問題は、次のとおりです。簡単なSpriteKitのゲームのパフォーマンスの問題 - Swift
1)ゲームは
2)CPU%は時間で50から60パーセントと同じくらい、高く得ることができた時間にラグを取得するだけでなく、時には比較的です低(< 20%)
3)デバイス(iPhone 6S)少し暖かい
を得ることができます私はlagginessを駆動しているものと信じて、私は常に作成し、SKSceneで円を削除するよということです。サークルはゲームにとって非常に重要な要素であり、サイズや物理を常に変更しなければならないので、やむを得ないことです.Bodyプロパティは、ノードを再利用するという点ではあまりできません。また、私は別のノードをほぼ常に動かしています。
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とパスを使い、パスをリセットしようとしました。しかし、私は物理学をリセットしなければならないので、イメージを試しました.Body、パフォーマンスが向上するとは思われません。
3)私は物理スピードを変えようとしましたが、世界のスピードはこれもほとんど効果がありませんでした。
4)私はまた、問題を特定するためにInstrumentsを使用しました。 SKRendererが使用しているリソースの大きなチャンクがありますが、私はこれに関する多くの情報を見つけることができません。
SKShapeNodesは非効率的で、控えめに使用する必要があります。私は1つのサークルを作成し、ちょうどそれをスケールすることをお勧めします – Knight0fDragon