2

SpriteKit でビューの一時停止を解除すると、fps が大幅に低下する (フレームレートが 5 ~ 10 fps に低下する) ことに気付きました。空のプロジェクト (Spritekit ゲーム テンプレート) でこれを試しました。コードは次のとおりです。

if(!self.view.paused){
        self.view.paused = YES;
        NSLog(@"Paused");
    }else{
        NSLog(@"Unpaused");
        self.view.paused = NO;
    }

シーンを一時停止すると、すべてが期待どおりに機能し、フレームは 60 fps で安定します。これをデバイスでテストしています。

if(!self.paused){
        self.paused = YES;
        NSLog(@"Paused");
    }else{
        NSLog(@"Unpaused");
        self.paused = NO;
    }

一部のフレームがスキップされるため、一時停止を解除するときにゲームプレイに問題が発生する可能性があります...何が起こっているのか考えていますか?

4

1 に答える 1

1

一時停止解除後、一時的に落ちていると思いますか?または、一時停止を解除した後は常に fps が低くなります。これは iOS 8 または iOS 9 でのみ発生しますか? iOS 9 を試すことはできますか? 一時停止を解除した後、Sprite-Kit がレンダリング サイクルを「ウォームアップ」するのに少し時間がかかるため、これが発生している可能性があると確信しています。インストゥルメントでプロファイリングを試して、何が起こっているかを確認できます。

解決策としては、スプライト キットには可変のタイム ステップがあり、残念ながらそれを変更することはできないため、一時停止を解除した後に一時的にspeedを下げてみることができます。SKPhysicsWorldジャンプしているアクションの場合は、 の を下げてみてspeedくださいSKScene。理想的には、おそらく両方を行う必要があります。

さらに、アクションについてのみ心配する必要がある場合は、SKView の代わりにシーンのみを一時停止してみてください (ただし、更新メソッドが実行されることに注意してください)。または、シーンを一時的に一時停止してから、SKView の一時停止を解除した後に一時停止を解除してみてください。

これ以外に、ドロップ フレームの準備を試みる以外に、これを修正するためにできることは他にあまりありません。まだ報告していない場合は、必ず Apple に報告してください。

以下は、これらすべてのプロパティのクラス リファレンスです。

SKView 一時停止

値が YES の場合、シーンのコンテンツは画面上に固定されます。アクションは実行されず、物理シミュレーションも実行されません。

SKScene - 速度

デフォルト値は 1.0 です。これは、すべてのアクションが通常の速度で実行されることを意味します。別の速度を設定すると、ノードとその子孫で実行されるすべてのアクションの時間が速くなったり遅くなったりします。たとえば、速度の値を 2.0 に設定すると、アクションは 2 倍の速さで実行されます。

SKScene - 一時停止

値が YES の場合、シーンがアクションを処理するときにノード (およびそのすべての子孫) がスキップされます。

SKPhysicsWorld - 速度

デフォルト値は 1.0 で、これはシミュレーションが通常の速度で実行されることを意味します。デフォルト以外の値は、物理シミュレーションで時間が経過する速度を変更します。たとえば、速度値 2.0 は、物理シミュレーションの時間がシーンのシミュレーション時間の 2 倍の速さで経過することを示します。0.0 の値は、物理シミュレーションを一時停止します。

于 2015-07-17T16:04:53.900 に答える