Androidでアクションゲームを作る!?

Posted in Android, Programing on 7月 7th, 2011 by admin

Androidでアクションゲームなどの「動きの激しい」ゲームを作る際には、どうしても、パフォーマンスの問題がつきまといます。

前作「SpaceDefender」は、SurfaceViewにBitmapDrawableを描画し、ゲーム画面を作りました。
今新しく作っているゲームでは、GLSurfaceViewを使ってOpenGLで画面を描画しようとしています。

手元には、実機がX06HT(HTC Desire)しかないので、これでの検証になってしまうのですが、ゲーム画面を描画しながら、ゲーム内オブジェクトを動かそうとすると、30fps程度が安定して更新可能な限界になってしまいます。

描画する画像や、描画手法を工夫することなどで、なんとかこの安定して描画可能なfpsを大きくしようと努力していたのですが、この考えを改めさせる記事がありました。
Read more »

Android OpenGLのパフォーマンス

Posted in Android, Programing on 6月 29th, 2011 by admin

OpenGLを使ってプログラム作成中なわけですが、再び問題が発生してしまいました。

背景を表示しようと、用意したPNG画像(512×1024)を画面全体に表示した板状ポリゴンにテクスチャとして貼り付けたところ、画面の更新頻度が落ちてしまいました。

(上の46が画面更新fps、下の29はゲームスレッド更新fps)
Read more »

GLSurfaceViewでEGL_BAD_ALLOC(eglSwapBuffers)

Posted in Android, Programing on 6月 28th, 2011 by admin

GLSurfaceViewの後始末でハマったのでメモ。

AndroidでOpenGLする場合、
GLSurfaceView.Rendererを継承したレンダラークラスを作り、GLSurfaceViewにsetRendererすると思います。

ここまでで満足してしまえばそれまでなのですが、ビューのタッチに反応しようとする場合、さらに、GLSurfaceViewを継承して独自のビューを作成します。

この状態では何にも問題ないのですが、GLSurfaceViewを継承したクラスで、surfaceDestroyedをオーバーライドしようとしたときに、謎のエラーが発生しました。

実機(X06HT HTC Desire)で実行してみたところ、アプリ実行中にホームボタンでホームに戻ろうとすると、強制終了してしまうのです。
(エミュレータでの実行ではなぜか問題なし)

ddmsで確認してみると、

06-28 17:33:36.602: ERROR/AndroidRuntime(28603): java.lang.RuntimeException: eglSwapBuffers failed: EGL_BAD_ALLOC

と出ています。

結局は、GLSurfaceViewを継承したクラスのsurfaceDestroyedで、super.surfaceDestroyed(holder);をコールしていなかったのが原因でした。

どうも、この中でGLThreadの停止処理などが行われていて、これが呼ばれないためにサーフェースが破棄されてもレンダリングしようとし、エラーとなっていたようです。

GLSurfaceViewを継承したクラスのsurfaceDestroyedで本来やりたかった処理を行った後、super.surfaceDestroyed(holder)をコールしてやることで、めでたく解決できました。

う~ん、疲れた・・・

AndroidでOpenGL(テクスチャアニメーション)

Posted in Android, Programing on 6月 27th, 2011 by admin

2Dゲームでは、キャラクターの動きは、実際の表示位置を動かす方法と、パラパラ漫画のように、複数の画像を切り替えることによって動いているように見せかける方法とを組み合わせて表現します。
(常識ですね)

今回、ゲームを作成するにあたってOpenGLを2D的に使うと決めたのはいいのですが、悩んだのはこのパラパラアニメーションでした。
Read more »

Android実機でOpenGL ES(テクスチャが表示されない)

Posted in Android, Programing on 6月 27th, 2011 by admin

今回作成するゲームでは、OpenGLを2Dで使用し、画面を描画しようとしています。

そのための実証コードを書いていたのですが・・・
ハマりました。

まずは、エミュレータ

Read more »

[AdMob]AdViewが表示されない!?

Posted in Android, Programing on 6月 23rd, 2011 by admin

先日から開始した新ゲーム作成ですが・・・
・とりあえずタイトル画面から作ろうかな
→前回のSpaceDefenderみたいにタイトル画面に広告を入れてみよう
→そういえば、AdMobSDKが更新されているな・・・

ということで、最新版AdMobSDKを使ってみました。

結果なのですが、以前のAdMobSDKから比べると、はるかに導入が簡単になっていました。
Read more »

「日本Androidの会」茨城支部

Posted in Android, Diary on 6月 23rd, 2011 by admin

日本Androidの会に、茨城支部が発足するそうです。

管理人は、現在茨城県水戸市在住の上、大学時代に埼玉に住んでいた以外は、生粋の茨城人です。

茨城県におけるAndroidの普及促進を目指すのを活動方針としておられるようで、Android大好き茨城人としては、とても楽しみにしています。

7/10(日)に、茨城支部キックオフが開催されるとのことですので、参加登録してみました。
どんな展開があるのか、非常に楽しみです。

OpenGLのテスト

Posted in Android, Programing on 6月 10th, 2011 by admin

さて、新しくプログラムを作るにあたって、今まで何もしていなかったわけではなく、OpenGLのテストなどしておりました。

AndroidでOpenGLをする場合、というか、OpenGLを使おうとした場合、最初につまずくのはモデルデータの準備ではないでしょうか?

この問題をクリアするために、Wavefront OBJファイルからのコンバーターを作ってみました。

Wavefront OBJファイルについては、3D方面に知識を持つ人ならば、説明の必要もないと思いますが、多くの3Dモデリングソフトなどでエクスポート/インポートが可能なファイル形式です。
Read more »

Androidでゲームを作ろう! 再開です。

Posted in Android, Programing on 6月 10th, 2011 by admin

ご無沙汰してます。

どうにもネタがないのと、本業が忙しかったために、更新をずっとさぼっていたのですが、「Androidでゲームを作ろう!」再開です。

今日は、リーソスの作成を主にやってました。

成果はコレ!

タイトルがまたベタなのは置いといて、前回の反省から、マーケットで目立つために必要な、プロモーション画像から作成です。

ホントはプロモーション動画も作りたいところですが、個人ではちょっときついですね。

AdMobSDKダウンロードのため、AdMobへも登録してしまったので、なんとか作成完了したいところです。

前回Space Defenderの時は、ゲーム画面にSurfaceViewを使用したのですが、速度で泣いたので、今回はGLSurfaceViewを使って2D的にOpenGLを使ってみようかと思います。

AdMobにAdSenseがキタ!

Posted in Android, Diary, Programing on 4月 20th, 2011 by admin

久しぶりのブログ更新です。

ここ最近は、本業の方が忙しかったため、なかなか更新できませんでした。
(ブログに書くほどのネタがないとも言う)

もはや日課となっているAdMobの収益確認をしてみたところ、ログイン後の画面がいつもと違います。
そこには、「 Google AdSense の広告を掲載できます」とあるじゃないですか!

AdSense広告の表示は一部のユーザーから段々と解放されますとのアナウンスがあってから、随分待ちましたが、ようやくの解放です。
早速「サイト及びアプリケーション」から対象アプリケーションの「設定を管理」ボタンを押し、「アプリ設定」タブを見ると・・・

ありました!

「Google AdSense を有効にして広告掲載率を高めます。」を選択して設定を保存!
(ほんとに広告掲載率あがるの?)

あとは「Google AdSense の広告の統計情報は 48 時間以内にレポートに反映されます。」とのことなので、しばらく様子見です。

どの程度変化があるのか楽しみです。