2011-08-08 11 views
1

私はアンドロイドのための単純なターンベースの2Dゲームを作成しようとしています。私が知る限り、基本的に3つの方法があります。ターンベースのゲーム、どの描画方法?

  • 「通常の」ビューを使用し、必要なときに(たとえば、タッチイベントで)図面のみを使用します。
  • 別のスレッドで「ゲームループ」と組み合わせたSurfaceViewを使用して、各ループの繰り返しを描画します。
  • OpenGL(これはまだどのように動作しているかわかりません)

小さなシミュレーションゲーム(a la Farmville)では、単純なアニメーションを使用していたのでSurfaceViewを使用しました。通常のビューを使用すると、グラフィックスを更新するためにタイマーを使用する必要がありました一定の間隔で。私は2つの方法のどちらが優れているのか分かりませんが、SurfaceViewメソッドはもっと簡単だったようです。一方、私は、無限の「ゲーム・ループ」を使用すると、バッテリーが非常に迅速に消耗することがわかります。 OpenGLについては、どのように動作するのか、それとも単なるゲームでは複雑すぎるのか分かりません。

私は単純なターンベースのゲーム(ポケモンの戦いのようなものだと思う)を持っているなら、上記の方法のどれが最善でしょうか?他のゲーム(Angry Birds、DanteInferno、Inotia、Jewels、Robo Defense、Wisp、Zoninaなど)は何を使用しますか?

私は、ウェブ上の情報が、いつ使用するかについて非常に不明であることがわかります。

+0

この種の質問には専用のコミュニティがあります:gamedev.stackexchange.com – Den

+0

@Den、申し訳ありません。私はスタック・オーバーフローをしてからしばらくしています。この種の質問のための別のコミュニティでした。 – pbean

答えて

2

私は単純なボードゲームを持っていました。これは、ベースのゲームになりました。私はSurfaceViewを使いました。 SurfaceViewを最適化することはできますが、標準的なビューを使用すると、特にスクロールゲームがある場合には、最終的には問題が発生します。

私はこの記事を使用しました。非常に参考になりました。長所と短所でゲームループを実装するさまざまな方法があります。http://www.koonsolo.com/news/dewitters-gameloop/ 良い出発点です。

バッテリーの消耗について、あなたはThread.sleep()を使用することができます。まだバッテリーのテストは行っていませんが、特にゲームを数時間プレイするとバッテリーが消耗するという事実に直面しなければなりません:)

+0

ああ、ありがとう、私はそのリンクを見て、私が集めることができるものを見ます。スクロールゲームではどういう意味ですか?それがどのように選択に影響しますか?とにかくゲームはバッテリーを消耗させることは知っていますが、私は小さなゲーム(Bejeweledタイプと思う)は、非常に複雑で大規模なゲーム(怒っている鳥やDoom/Quakeを考えています。 )。 – pbean

+0

スクロールゲーム:レベルが画面サイズよりも広い/大きいゲームがある場合、スクロールする必要があります。怒っている鳥の中で、あなたは左/右のズームイン/ズームインをスワイプします。これを行うには、SurfaceViewを使って最適化するのが良いでしょう。 – blejzz

1

OpenGLは繰り返し呼び出される描画ループも使用します。 SurfaceViewのアプローチと同様に動作します。 OpenGLはパフォーマンスの面で高い評価を受けていますが、それは非常に複雑です。小規模なプロジェクトでは、それがどのように動作するかを覚えていない限り、投資価値がないかもしれません。

バッテリの寿命に関しては、ほとんどのCPU集中型タスクが最も排水されるため、最も効果的な再描画戦略(時間ベースまたはイベント駆動型)が最適な選択となります。シンプルなプロトタイプをベンチマークすると、ゲームコードに最も適したものが得られるはずです。

1

私はAndroidでゲーム開発を行っていませんが、アニメーションとスクロールのUI要素が多いアプリケーションを作成しています。このプロジェクトでは、通常の拡張ビューとSurfaceViewを組み合わせて使用​​しました。これまでゲームプログラミングで使用されていた多くのテクニックを借りなければなりませんでした。途中で私は通常のビューとSurfaceViewがどのように違うのかを学んだし、それぞれを使うことの長所と短所を知った。

2つの大きな違いは、把握することが重要だと思うのは、SurfaceViewを使って、実際にスクリーンバッファに書き込むことです(技術的に正しいわけではありませんが、それについて考えるのが最も簡単な方法です)あなたが望むようにすぐに、そしてしばしばあなたが望むように(限界内で)。これは、通常のView階層内には存在しません。この方法で描画できるので、高速アニメーショングラフィックスが可能になります(特に、ビットマップをオフセットしてスクロールバックグラウンドを作成し、アニメーションビットマップスプライトを上に重ねる)。あなたのコードは、必要なときに直接描画を行います。 SurfaceViewの主な欠点は、私が自分の経験から伝えることができる限り、その背後に他のビューを表示することができないことです(つまり、透明効果はありません)。

通常のビューは、通常のビュー階層にあります。 SurfaceViewとは異なり、は、あなたのコードがしたいとすぐに通常のビューの再描画を行うことはできません。このビューでinvalidate()(またはUI以外のスレッドからpostInvalidate())に電話して、再描画するようにシステムに指示する必要があります。しばらくして描画を実行すると、そのビューのonDraw()が呼び出されます。それがどのくらい素早く呼び出されるかは保証されていないため、グラフィックを更新する速度が制限される可能性があります。ただし、通常のViewの利点は、通常のView階層内にあり、Viewを透過的に配置することができることです。

関連する問題