2010年12月5日日曜日

OpenFeintの不具合修正




地下鉄などでゲームを遊んでいるときに、ネットワークがつながらないことがよくあると思います。携帯電話のゲームでは、そういう突然電波が悪くなっても遊べるようにするためのエラー処理がとても大事です。
OpenFeintのバージョン1.0.1ではそのパターンに致命的な不具合が残っているらしく、「初回起動時に電波が通じないと、その後常に画像がすべて表示されなくなる」という現象があります。もしOpenFeintのJava版を使っていて、そういった現象に悩まされた場合com.openfeint.internal.ui.WebViewCache.javaを下記の様に修正すると治ります。


/* この関数をコメントアウトし、処理を置き換える。
private void copyDefaultItems() {
final File baseDir = appContext.getFilesDir();
// deleteAll(new File(baseDir, "webui")); //!!!!!!DELETE THIS!!!!!!
if(!(new File(baseDir, "webui").isDirectory())) {
Thread t = new Thread(new Runnable() {
public void run() {
copyDefaultBackground(baseDir);
}
});
t.start();
}
else {
clientManifest = getDefaultClientManifest();
}
}
*/
/**
* 電波の通じない場所で起動すると画像が出ないバグがあるため、常に
* 画像ファイルをコピーする。
*/
private void copyDefaultItems() {
final File baseDir = appContext.getFilesDir();
Thread t = new Thread(new Runnable() {
public void run() {
copyDefaultBackground(baseDir);
}
});
t.start();
}


たぶんwebuiディレクトリだけできてしまうと次から画像ファイルをコピーしないため、オリジナルの画像を修復できないのが致命的になっている原因だと思います。この修正ではWebViewで使用する画像ファイルのキャッシュを起動時に常に初期化します。
(もしかすると次のバージョンでは治っているかもしれません。)