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のマシンに接続されていない) - ほとんど常に非常にパフォーマンスが悪い - メジャーヘッドスクラッチ!