0

AndEngine を使用してゲームを開発しましたが、深刻な問題が 1 つあります。ユーザーは、ゲームの熱デバイスが多すぎてバッテリーを消耗すると報告しています。ゲームは単純なパズルであり、複雑なアニメーションや物理演算を使用していないため、なぜそうなるのかわかりません。また、スプライトの大部分の更新を無効にし、ウェイクロック オプションを設定しました。

engineOptions.setWakeLockOptions(WakeLockOptions.SCREEN_ON);

しかし、これは役に立ちません。ここでゲームを見ることができます: https://play.google.com/store/apps/details?id=com.icecat.hex

コードに関するご質問は喜んで承ります。この問題を引き起こす可能性のある問題またはエンジン設定についてどう思いますか。

4

1 に答える 1

1

まとめ:

• ユーザー入力をポーリングしない

• せいぜい 250 ミリ秒を超えるユーザー入力をチェックする

• ポーリングによって電力効率が低下します

• 250 ミリ秒未満のユーザー入力をチェックしても、応答時間は速くならず、電力効率に悪影響を及ぼします。

詳細:

確認すべきことは、ユーザー入力をどのように待っているかです。ARM Cortext A8 プロセッサ アーキテクチャ (S2 の基盤と思われる) には、高度な電源管理機能があると思います。これは、プロセッサのアイドル状態の電源状態があることを意味します。つまり、プロセッサは、ユーザー入力の待機などのことをしていないときにスリープ状態になります。

非常によくある間違いは、ポーリングまたは入力のチェックが多すぎることです。私たちは「できるだけ早くユーザー イベントに応答する必要がある」と自分に言い聞かせ、10 ミリ秒未満の周期で入力をチェックするためにポーリングまたは割り込みを行います。

これには 2 つの問題があります。人間の最速の応答は>.25秒です。ユーザー側の考えを含めると、これは 0.5 秒以上になります。

これにはいくつかの大きな問題があり、そのうちの 1 つが問題の原因となっている可能性があります。

  • 最適なユーザー応答は >.25 秒です

  • プログラムの計算を追加すると、アプリの応答の下限は>>.25秒になる場合があります

  • 最も重要なことは、過剰なチェックを行うと、プロセッサがスリープ状態になるのを防ぐことです。スリープ状態になることで、プロセッサはほとんどの電力を節約できます。プロセッサは定義上何も実行しておらず、ウェイクアップしても大きなレイテンシ (<<500usec、おそらく 100usec に近い) が発生しないため、スリープに入ってウェイクアップしてもパフォーマンスにはほとんど影響しません。

詳細については、「便利な電源および電源管理の記事、ブログ、参考文献のリスト」を参照してください。後の研究では、HPC (ハイ パフォーマンス コンピューティング) とインテルのアーキテクチャが参照されていますが、原則と技術は、タブレットや電話を含むすべての最新のプロセッサに適用されます。

于 2014-04-21T16:10:19.670 に答える