2012-04-20 12 views
13

私のゲームでは電池が多すぎます。私はそれが匹敵するゲームと比べてどれくらい使うのか正確にはわかりませんが、あまりにも多くを使います。プレイヤーは多くのことを使用していると不平を言いますが、多くの人がデバイスを「熱い」状態にしています。私はちょうどこれを調査し始めており、検索スペースを狭めるためにいくつかの理論的かつ実践的な質問をしたがっています。これは主に自分のゲームのiOSバージョンに関するものですが、おそらく同じ問題の多くがAndroidバージョンに影響します。多くのサブ質問をして申し訳ありませんが、それらはすべて相互に関連しているように見えました。iPhone/iPadゲームのバッテリー使用量を測定し改善する方法(Androidも)

サイドノート:私のゲームでは、ネットワークにアクセスできない(バッテリーを大量に消費する場所がいくつかあります)、バックグラウンドではバッテリーを大量に消費しません。フォアグラウンドが問題になっています。

(1)バッテリレベルを読み取るためのAPIがあるので、私はいくつかの自動テストを行うことができます。ここで私の質問は:信頼できる読書を得るためには、物事を稼動させるためにどれくらいの期間(あるいは多分、バッテリーの消耗量について)必要ですか?たとえば、10分間稼動させると信頼性が高いですか?それがバッテリーの10%を使い切ったら、それは信頼できますか?それとも、1時間ほど運転するほうがいいですか(または、バッテリーがどれくらい50%消費するのかを見てください)?私がここで求めているのは、バッテリーメーターがどれほど感度が高く信頼性が高いかということなので、各テストの実行時間を知っています。

(2)バッテリの使用量が多い原因は何かを理解しようとしています。以下にいくつかの要因を挙げます。

(2a)多くのゲームと同様に、私のゲームは各フレームでフルスクリーンを描く必要があります。それは約30fpsで動作します。私はAppleが「必要なだけスクリーンをリフレッシュする」と言っているが、すべてのフレームを描画する必要がある。実際には、変更された画面の部分だけを描画する作業にいくつかの作業を加えることができましたが、私の場合はまだほとんど画面になります。とにかく、私は画面の一部だけに描画をローカライズすることができますが、私はまだOpenGLのスワップバッファを毎秒30回呼び出しているので、少しだけ描画するのが難しくなっています?

(2b)スクリーン要素を描画するときに、浮動小数点数の計算(たとえば、テクスチャUV座標の計算)と、いくらかの(倍精度の)倍精度の計算が続きます。同様の整数演算と比較して、これらがどれだけ高価であるかわかりません。おそらくこれらの値をキャッシュして、繰り返し計算する必要がないようにすることができます。

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

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

私は、ゲームの特定の部分を無効にし、繰り返しバッテリテストを実行することで、どの要因が問題になっているのかを絞り込むことができることを認識しています(したがって質問のパート(1))。それは、ディセーブル化が自明ではなく、一般的なアドバイスを最初に求めると思っていたほどの潜在的な犯人があるということだけです。ガベージコレクション
例えばのための使用を減少している、 Android Documents on optimization

私のためによく働く何:

+0

あなたは主にiosバージョンだと知っていますが、アンドロイドバージョンには広告がありません。明示的にネットワークを使用していない場合でも、バックグラウンドで使用しているものはありますか? – Michael

+2

さらに、研究論文を読んでも大丈夫な人は、最近の会議から[th​​is](http://research.microsoft.com/en-us/people/mzh/eurosys-2012.pdf)が出てきました。それはすべてのAndroidですが、これは他の人がどのように電力測定を行ったかをあなたに知らせるかもしれません。 – Michael

+0

マイケル、参考に感謝します。私はこの論文を読んだので、もっと詳しく見ていきます。現時点では、eprofツールをダウンロードできるようには見えません。 (?)しかし、おそらく私は正しい方向に私を指す紙から十分な洞察を集めることができます。あなたの他の質問に答えて、いいえ、私は広告を表示していません。 –

答えて

1

この記事を読んで試してみてくださいデスクトップコンピュータ用のプログラミングでは、ループ内で変数を定義するのに慣れている(または私は)ので、ループの外側から必要がないときにはガベージコレクションが大量に使用されます(そして、私はプリミティブVARSが、大きなオブジェクト。

はそのようなものを回避してみてください。

+0

ありがとう、しかし私は実際に私のコードがネイティブモード(少なくとも私が制御しているすべてのコード)であるので、ガーベジコレクションがないので、私は実際にマーマレードを使用しています。そして私の他のマーマレードのアプリはこの問題を抱えていないので、それはマーマレードの問題ではありません。 –

1

本当に私がダウンして(!デバイスのと暖かさ)バッテリーの使用状況を取得し、私のカスタムのOpenGLエンジンでFPSを絞ることでした助け一つの小さなヒント。

特にシーンが静止している間(ターンベースのゲームやユーザがタップしたポーズなど)、FPSを抑制する または、ユーザーが10秒以上応答しない場合は、screensavデスクトップPCで現実の世界では、モバイルデバイスを使用しているときにユーザーが気を散らすことがよくあります。 )

また、iPhoneでは、時には60FPSがデフォルトで30fpsに手動でスロットルすることはほとんど見えず、半分ほど安全です。 gpuサイクルの数(したがって、バッテリーの多く!)。

関連する問題