2017-10-10 10 views
1

iOS11/Swift4 - 基本的なパーティクルシステムでPhysicsWorldを使用して、シンプルで多くのボディ(800)2x2ピクセルのSpriteKitシミュレーションを実行しています。スレッドの割り当てに一貫性がありませんiOS11/Spritekit/Physicsbody low FPSを意味する

単純な放射状の重力ノードが含まれています。衝突や接触検出を使用せずに周回する800個のオブジェクトがあります。

私のテストハードウェアでは、iPhone6S - 私は本当に60FPSとスムーズなシミュレーションを達成することに感銘を受けました。これははるかに多くの探査の道を開きます。

私が反対している唯一の問題は、パフォーマンスが実際に矛盾していることです。

重力ノードのフィールド強度を高い値の中間実行(オブジェクトがより高速に移動することを意味する)に切り替えると、実行の約25%でシミュレーションで60FPSが問題なく発生しますが、残りの3つで4回実行すると、フレームレートは3〜4FPSに低下します

低磁界強度(遅い動き)に戻すと、常に60FPSが再び得られます。

私はXcodeでプロファイリングしている - ただ一つのスレッドがタスクに与えられている、時には3または4スレッドがアプリに与えられていることを確認することができ、60FPSを与えるが、他の回 - 危ないパフォーマンスを意味

グランドセントラルディスパッチを試してみましたが、スレッドの優先順位は無駄です。各フレームを実行している唯一のコードは、とにかく、フィジックスワールドです。

どのように私は一貫性のある60FPSを得ることができますか - 明らかにハードウェアはそれに対応していますが、それが気に入ったらちょうだい!

その他の注意:デバイスがdev Mac/charge/USB/XCode実行中などにプラグインされている場合、使用されるすべてのスレッドでパフォーマンスが向上することがよくあります。しかし、正確に同じアプリを試して、翌日、デバイス(スタンドアロン)で実行する(devのマシンに接続されていない) - ほとんど常に非常にパフォーマンスが悪い - メジャーヘッドスクラッチ!

答えて

0

ノードに関するパフォーマンスの問題は、物理ボディを使用した場合、カスタムボディの代わりに標準化されたボディを使用する場合に、物理ボディを使用する場合によく発生します。お役に立てれば。

関連する問題