2010年6月28日月曜日

NexusOne, Droidでテクスチャがでない問題




「魔王なんて!」発売後、かなり悩まされた問題があります。特定の端末で「テクスチャが全く表示されない」という現象です。発生端末は海外の端末全てのようで、主にNexusOne, Droidで発生すると申告が来ていました。
(バグ修正にご協力頂いたGoogle Chris Pruettさん、kerieruさん、ありがとうございました。m(_ _)m)

まったく同じプログラムなのにどうしてこういうことが起きたかというと、OpenGLESの仕様が違うかららしいです。具体的には何が違うかというと、「2の累乗以外のテクスチャをサポートしているかどうか?」です。日本用の端末のDesireとXperiaはてきとうなサイズの画像ファイルを読み込んでも簡単にOpenGLのテクスチャとして使用できますが、海外の携帯は「2の累乗サイズ」でないと全く表示できません。

また、最後に悩まされたのが下記の関数です。これは海外の端末では全く機能しませんでした。


gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, tex.w, tex.h, 0, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, null);
gl.glTexSubImage2D(GL10.GL_TEXTURE_2D, 0, 0, 0, tex.w, tex.h, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, bb);


どうもこの関数は引数にサイズを指定できるようで、こういう関数を使用してもいけないみたいです。うまくいったのは下記の関数をつかって2の累乗サイズの画像ファイルを読み込んだときだけでした。


GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);


この問題は実機テストがかなり大変なので、横着せずに2の累乗でテクスチャを用意するような実装を最初からした方が良さそうです。

2010年6月25日金曜日

Xperiaのandroid.os.HandlerのsendMessageDelayedが不正確な問題

「魔王なんて!」をリリースしてから2週間と少し経過して、やっとバグ修正も一段落してきました。Xperiaについてかなり重要な事が分かったので情報シェアさせていただきます。

私はXperiaユーザーではないので正確なアップデート日付は分かりませんが、2010年6月中旬ぐらいのアップデートをきっかけにTimer処理がおかしくなりました。具体的にいうとandroid.os.Handlerクラスで処理しているキーリピートの間隔が急にバラバラになった事です。そのため、java.util.Timerやjava.lang.Threadに処理を置き換えましたが全くダメでした。具体的には下記のような実装をしているゲームアプリはいまごろ全てダメになっているような気がします。また、GC(ガベージコレクション)が重たくなりキーリピートがスムーズに動きません。


public class TickHandler extends Handler {
long before = 0;
long delay = 200;
public TickHandler(){
this.sleep(1000);
}

@Override
public void handleMessage(Message msg) {
long current = SystemClock.uptimeMillis();
long x = current - before;
if(x > delay){
before = current;
if(ControllerView.repeatNative)
pushRepeat(true);
}
this.sleep(10);
}

public void sleep(long delayMills) {
removeMessages(0);
sendMessageDelayed(obtainMessage(0),delayMills);
}
}



どうやって回避したかというと、下記二つの修正を行いやっと回避が出来ました。

* 「リアルタイムのインスタンス生成を(new)をとにかく減らす」
* 「GLSurfaceView.RendererのonDrawFrameのイベントでタイマー処理を統一」

2つ目の修正なのですが、どうやらOpenGLのタイマー処理だけ何故か正確だったのでこれに統一しました。どうしてもXperiaでタイマー処理がガタガタになったらこの修正を試す事をお勧めします。

2010年6月10日木曜日

レビューサイト「アンドロイダー」様に「満点+熱+一押し」最高評価頂きました!


Androidアプリレビューサイト「アンドロイダー」様サイト上にて「魔王なんてたおしちゃうから!」のレビューをしていただき、「満点 + 熱」の最高評価をいただきました。

ついに登場 2.5Dのトルネコ風ファンタジーRPG
魔王なんてたおしちゃうから!Lite


きっとゲームのキャラクター達も喜んでいると思います!ありがとうございました!

修正版1.3リリース報告

「魔王なんてたおしちゃうから!」のバージョン1.3を無料版、有料版ともども
リリース致しました。下記2点の不具合が修正されております。

1. 無料版で「ブラウン少佐」が不自然にゲーム世界以外の話(商品の説明)をしていた
2. カメラワークが不完全で視点が小刻みにぶれ、画面がみづらい不具合

ご迷惑おかけしました。
今後とも「魔王なんてたおしちゃうから!」をよろしくお願い致します。

2010年6月8日火曜日

Desire実機確認



Desireをやっと購入できまして、実際に動かしてみました。Xperiaで起動したときよりテクスチャの読み込みが圧倒的に早く、起動時間も倍速ぐらいの印象です。
たぶんこれはAndroidOS1.6と2.1の差じゃないかと思うのですが、Android2.2にあがったらさらに早くなるらしいですし、これからが楽しみです。