13

ゲームのバッテリー消費量が多すぎます。同等のゲームと比較してどのくらい使用するか正確にはわかりませんが、使用量が多すぎます。プレーヤーは、それが大量に使用されると不満を漏らし、多くのプレーヤーは、デバイスが「熱くなる」と指摘しています. 私はこれを調査し始めたばかりで、検索スペースを狭めるためにいくつかの理論的および実際的な質問をしたかった. これは主に私のゲームの iOS バージョンに関するものですが、おそらく同じ問題の多くが Android バージョンに影響します。多くのサブ質問をして申し訳ありませんが、それらはすべて相互に関連しているように見えたので、まとめておくのが最善だと思いました.

補足: 私のゲームはネットワーク アクセスを行わず (いくつかの場所でバッテリーの消耗が大きいと指摘されています)、バックグラウンドでバッテリーを大量に消費することもありません。問題なのはフォアグラウンドでの実行です。

(1) バッテリー レベルを読み取る API があることは知っているので、自動テストを実行できます。ここでの私の質問は次のとおりです。信頼できる測定値を得るには、どれくらいの時間 (または、おそらくバッテリーの消耗について) 実行する必要がありますか? たとえば、10 分間実行した場合、それは信頼できるでしょうか? バッテリーの 10% を消耗する場合、それは信頼できますか? それとも、1 時間以上実行した方がよいでしょうか (または、たとえば、バッテリーが 50% 消耗するのにかかる時間を確認します)? ここで私が求めているのは、バッテリー メーターの感度と信頼性です。そのため、各テストの実行に必要な時間はわかっています。

(2) バッテリの使用量が多い原因として考えられるものを理解しようとしています。以下に、考えられる要因をいくつか挙げます。どれが最も可能性の高い犯人であるかを理解するのを手伝ってください:

(2a) 多くのゲームと同様に、私のゲームは各フレームで全画面を描画する必要があります。約 30 fps で実行されます。Apple が「必要な分だけ画面を更新する」と言っていることは知っていますが、すべてのフレームを描画する必要があります。実際には、変更された画面の部分だけを描画する作業を行うこともできますが、私の場合はまだ画面の大部分になります。いずれにせよ、描画を画面の一部だけにローカライズできたとしても、OpenGL スワップ バッファーの呼び出しを 1 秒あたり 30 回行っているため、描画を少しでも少なくするために一生懸命働いたことは本当に問題でしょうか? ?

(2b) 画面要素を描画すると、一定量の浮動小数点演算 (テクスチャ UV 座標の計算など) と、倍精度演算 (より少ない) が行われます。同様の整数演算と比較して、これらがバッテリーに関してどれほど高価かはわかりません。おそらく、これらの値の多くをキャッシュして、繰り返し計算する必要がないようにすることができます。

(2c) シーンをレンダリングするときに、ある程度のテクスチャ切り替えを行います。以前はゲームが遅くなりすぎることだけを心配していましたが (そうではありません)、テクスチャの切り替えを減らすことでバッテリーの使用量が減るかどうかも疑問に思っています。

(2d) これが私にとって実用的かどうかはわかりませんが、シェーダーと OpenCL について読んでいて、CPU 処理の一部を GPU にアンロードするかどうかを理解したいと思っています。バッテリー(おそらくベクトル型の操作でより高速に実行されることに加えて)。それとも、CPU よりも GPU でさらに多くのバッテリーを使用するのでしょうか?

ゲームの特定の部分を無効にし、バッテリーのテストを繰り返し実行することで、どの要因が関係しているかを絞り込むことができることを認識しています(したがって、質問の部分(1))。その無効化は簡単ではなく、最初に一般的なアドバイスを求めると思った十分な潜在的な犯人がいるというだけです.

4

2 に答える 2

2

この記事を読んでみてください: 最適化に関する Android ドキュメント

私にとってうまくいくのは、ガベージコレクションの使用を減らすこと
です。たとえば、デスクトップコンピューター用にプログラミングする場合、ループの外側で必要ないときにループ内で変数を定義することに慣れています。これにより、ガベージ コレクションの大量使用 (プリミティブ変数についてではなく、大きなオブジェクトについて話しています。

そのようなことを避けてみてください。

于 2012-04-22T14:32:22.997 に答える
2

バッテリーの使用量 (およびデバイスの熱) を下げるのに本当に役立った小さなヒントの 1 つは、カスタム OpenGL エンジンで FPS を調整することでした。

特に、シーンが静的な場合 (ターン制ゲームやユーザーが一時停止をタップした場合など) は、FPS を抑制します。または、デスクトップ PC のスクリーンセーバーのように、ユーザーが 10 秒以上応答しない場合は調整します。現実の世界では、ユーザーはモバイル デバイスを使用しているときに気が散ることがよくあります。ユーザーが自分がいる地下鉄の駅を把握している間、アプリのバッテリーを消耗させないでください;)

また、iPhone では、60 FPS がデフォルトの場合もあります。これを手動で 30 FPS に調整しても、ほとんど目に見えず、GPU サイクルの約半分を安全に使用できます (したがって、大量のバッテリーを使用できます)。

于 2012-06-12T20:18:43.850 に答える