2017-12-25 29 views
1

私のアプリをプロファイリングしている間はちょっと混乱しています。私はそれがCPU使用量が増えるにつれてそれが気づいたが、私はなぜそれがわからない。プレイヤーがアイドル状態であっても、72%のCPU使用率があると思われます。[SKScene _update:]私のゲームはターンベースであるため、私の更新機能は空白なので、ここで何が起こっているのでしょうか?空白のままにしておくと、更新機能が85%の時間を要するのはなぜですか?

ヒントをいただければ幸いです。

enter image description here

これは私の更新方法である、とする必要がある場合:

override func update(_ currentTime: TimeInterval) { 
    // Called before each frame is rendered 
} 

追加情報:

メインゲームマップがUIと六角ベースSKTileMapNodeですSKCameraNodeを使用して描かれる。 UIは約30個のノードで構成されています。SKLabelNodeSKSpriteNodeユーザがターンを終了するたびに別のスレッドで実行されるAIがあります。 AIが実行されると、メインスレッドのCPU使用率が上記の画像のように即座に低下します。これは、AIがGKMinMaxStrategistbestMoveForPlayer()機能しか実行していないために、奇妙です。

答えて

1
手動ターンで再び update(_:)を呼び出す update(_:)を呼び出すことが可能

は、あなたが空の実装を持っている場合でも、シーンを更新するために、このメソッドをオーバーライドでなければなりません。シーンのSKSceneDelegateを設定していることを確認してください。

このメソッドを直接呼び出さないでください。シーンがビュー内に表示され、一時停止されていない限り、フレームあたり1回だけ、 と呼ばれます。 既定では、このメソッドは何も行いません。シーンのサブクラスは このメソッドをオーバーライドし、シーンに必要な更新を実行する必要があります。

あなたはまた、手動でビューを再開/一時停止することがあります。

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    guard let view = view else { 
     return 
    } 

    view.paused = !view.paused 
} 
+0

私はほとんど間違いなく、更新を上書きして空白のままにしています。また、SKSceneDelegateはこれと正確に何をしなければなりませんか? – Aleksandr

+0

すべてのシーン処理メソッドは、関連するコードなしで 'SKSceneDelegate'を使って委譲することができます。私は、あなたがサブクラス化して独自のデリゲートを実装しているとは言えません。プレイヤーのターンが終了した時点でビューを一時停止し、開始する前に更新してみてください。 – RLoniello

+0

私は明示的にSKSceneDelegateで何もしません。私はそれにアクセスせず、その機能のいずれかで動作します。手動で 'update'を呼び出すことはどこにもなく、ビューを一時停止することは、ユーザが動かすことができないので目的を破ります。 – Aleksandr

関連する問題