2016-09-15 11 views
2

私はSwiftとSpriteKitで最初のゲームを構築していますが、CPU使用率やバッテリ寿命に関して多くの問題がありました。バックグラウンドスレッドで悪意のある人をインスタンス化するなどの特定のタスクを実行するのが一般的なプラクティスであるかどうかを知りたかったので、もしそうなら、私はそれをどのように実装するのでしょうか?SpriteKitプロセスをバックグラウンドスレッドで実行してCPU使用率を向上させる

+0

SKShapeNodeを使用していますか? –

+0

あなたの質問を遅れの原因に変え、いくつかのコードを投稿してください。なぜあなたが遅れているのか、人々はあなたを助けることができます。さもなければ私たちは速い4が出てくるまでゲームを推測することができます – Knight0fDragon

答えて

5

初めてのゲームの場合、実際に何をしているのか分からない限り、複数のスレッドで夢中になりたくないかもしれません。 SKNodeの操作は、SKView(Private) _update:が実行されているのと同じスレッドで行われなければならないことに注意してください。これは、runActionブロックが実行されるのと同じスレッドです。あなたがしなければ、あなたはクラッシュするでしょう。私が作業していたSpriteKitのゲームでは、マルチスレッドで、SKActionまたはrunActionを使用していませんでした。私は最終的にツリー管理のためにrunActionを追加しなければならなかった。私は現在、このためにOpenGLでこれを書き直しています。

ファイルのロードやネットワークコールなど、オフロードするのに適したタスクがいくつかあります。これらの種類のものにはGCDを使用する必要があります。マルチスレッディングは想像しているようにCPU時間を短縮しません。

あなたのコードはあなたがCPU時間を食べさせている何か悪いことをしています。たとえマルチスレッドであっても、同じ高CPUで終了しますが、デバッグがより困難になるという問題があります。私はそれを不可能と言っているわけではありません。

時間を費やして、CPU使用率が高い理由を実際に把握してください。あなたの他のスレッドに基づいて、あなたは多くをやっていません。

実験として、この宇宙船の例をあなたのデバイス上で実行してください。船を追加し続け、CPUに何をするかを確認してください。 CPUとFPSが低下する前に追加する必要のある数を調べます。それをあなたのゲームと比較してみましょう。宇宙船の例は単なるデモです。

+0

私は実際にそのデモで遊んでいました。私の驚きには、遅れなく約200%の船を追加することができました。私は、あなたのコメントでは一目瞭然だったように思えるかもしれませんが、本当に感謝して、私が間違っていることを理解するために毎日仕事をしています。これまでのところ私は船クラスでいくつかのことを改善することに成功しましたが、100%CPUへの全体的な傾向は変わりません。それは、インスタンス化、更新時の過剰な呼び出し、および他のいくつかの船の機能から生じると思われます。 – Sam

+0

SKNodeを主スレッドから操作することができます。主スレッドでは何もしません。基本的にシーンツリーの一部でない場合は – Knight0fDragon

+1

です。これを一般化してシンプルにします。私は、これを忘れて、シーン階層にある何かの上で 'addChild'を試してみるほうが簡単です。また、必ずしもクラッシュするとは限りません。タイミングがレンダリングサイクルに対応すると、クラッシュが発生します。 –

関連する問題