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 »

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 時間以内にレポートに反映されます。」とのことなので、しばらく様子見です。

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

HoneyCombを試そう!

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

久しぶりのpostです。

adamrockerさんのツイートで知ったのですが、Android 3.0 Platform Preview and Updated SDK Toolsとのことで、HoneyCombのプレビューとSDKのアップデートがあったようです。

で、早速入れてみました。

で、でかい・・・
これがWXGAのサイズですか・・・
むう・・・
とりあえずいったん終了してScreen Sizeeを9(Scale0.57)で起動しなおしました。

んで、起動したらこんな画面です。

真ん中のカギマークにタッチしたら・・・

こんな、ポワワ~ンってロック解除はどうすんのかな・・・

カギを上へ引っ張ったら解除できたみたいです。
でも、なんか画面の方向がおかしいな・・・横画面のはずなのに、中身は縦画面のままのようです。
CTRL+F11で回転させると・・・

相変わらずでかい・・・

右上のAppsをタッチしたところ・・・

こんなんでました。

ブラウザを起動したところ

しばらくすると勝手に消えてしまうようです。(強制終了?)

これはclockの画面

カクカクしています。

あり?どうやって戻るんだ?backは?
左下の3つのアイコンの真ん中をタッチしたら戻ったみたいです。これはHomeかな?

Speech Recorderっていうやつの画面なんですが、

なんでしょう?ボイスレコーダー?喋ったのがそのまま文字になるとか?

あれ?今気が付きましたけど、ハードウェアキーがないです。
電源ボタン長押しとかは入れられないのかな・・・?

以上、ざっと触ってみた感触としては、エミュレータじゃ重い!
VMWare Player on WindowsXP 64bitでエミュレータを動かしているためかもしれないですけど、これでデバッグはかなり無理です。
Froyo辺りまでは結構スムーズに動いてたのに・・・
正式公開までには軽くなるんでしょうか?実機必須?

ホントのプレビュー状態ですけど、もうすでに期待大という感じです。ただ、今の状態では画面の大きなAndroid端末っていうだけですので、この大画面を生かしたアプリが必須という感じです。

開発者からすると、この画面サイズには新たな創作意欲が刺激されまくりです。

実機が出回るまでに、何か作りたいですね。