a9padがここに書いてある通り、2.3にバージョンアップできるといういことで、ついついやってしまいました。
動作とかMarketとかは順調なんですが、
今まで動いていた自作のアプリが動かなく。
で、デバッグウインドウで見ると、MediaPlayer.createでnullぽ。
よくわからないんですが、createしようとするものがoggだとnullるっぽいです。
mp3にしてみたら再生出来たので。
でも、SoundPoolでは普通にoggも再生できるのです。
なにこれ。バグ?バグなの?
どうすればいいの??
2011年12月12日月曜日
2011年10月4日火曜日
AndroidでZipInputStream
最近、ColladaをAndroidで表示しようとか頑張ってたんですが(すでに過去形)
Metaseqoiaしかり、Colladaしかり、バイナリじゃなくて、テキストファイルなんですね。
なので、読みやすいという利点はあるんですが、逆に容量が増えがち(アニメーション入れると平気で2~3Mにはなる)
Androidには何気にファイル容量制限があって、機種によっては1Mを超えたくらいでオープンできなくなるし(経験則なので、実際のところは不明)
なので、荒業で「Zip圧縮したファイルを展開しながら読む」って事ができないかなーーと。
JavaにはもともとZipInputStreamという素敵なストリームクラスがあるので、リソース読むにもAssetsから直接読むにも、ZipInputStreamを挟むだけ。
というわけで、Meshクラスのロード部分抜粋
気をつけるのは getNextEntry(); をやってあげないと、zip内が1ファイルだとしても読み込み準備ができないということ。
ちなみに複数ファイルを圧縮しちゃった場合は知らんぜよ。
これによって、2MぐらいのColladaファイルも圧縮したら200kぐらいになってくれたので、今まで読めなかったファイルも読めるようになったりしました。
いや、もう、Colladaはアニメーションで挫けたので今更ではあるんですが。
Metaseqoiaしかり、Colladaしかり、バイナリじゃなくて、テキストファイルなんですね。
なので、読みやすいという利点はあるんですが、逆に容量が増えがち(アニメーション入れると平気で2~3Mにはなる)
Androidには何気にファイル容量制限があって、機種によっては1Mを超えたくらいでオープンできなくなるし(経験則なので、実際のところは不明)
なので、荒業で「Zip圧縮したファイルを展開しながら読む」って事ができないかなーーと。
JavaにはもともとZipInputStreamという素敵なストリームクラスがあるので、リソース読むにもAssetsから直接読むにも、ZipInputStreamを挟むだけ。
というわけで、Meshクラスのロード部分抜粋
/**
* Assetsフォルダ内のzipファイルからMeshを作成
* @param zipName zip圧縮されたファイル
* @param loader 使用するローダー
* @return
* @throws IOException
*/
public static Mesh getFromAssetsZip(String zipName,MeshLoader loader) throws IOException{
int resID = zipName.hashCode();
//既に読み込まれている
if (meshMap.containsKey(resID)) {
return meshMap.get(resID);
}
ZipInputStream zis = new ZipInputStream(Global.view.getContext().getAssets().open(zipName));
zis.getNextEntry(); //これやらないと、ファイルが読み込めないよ。 1zipに複数ファイル入れないでね。
Mesh newMesh = loader.load(zis);
meshMap.put(resID, newMesh);
return newMesh;
}
/**
* リソースに登録されたzipからMeshを作成
* @param resID リソースID
* @param loader 使用するローダー
* @return
* @throws IOException
*/
public static Mesh getResZip(int resID,MeshLoader loader) throws IOException{
//既に読み込まれている
if (meshMap.containsKey(resID)) {
return meshMap.get(resID);
}
ZipInputStream zis = new ZipInputStream(Global.view.getResources().openRawResource(resID));
zis.getNextEntry(); //これやらないと、ファイルが読み込めないよ。 1zipに複数ファイル入れないでね。
Mesh newMesh = loader.load(zis);
meshMap.put(resID, newMesh);
return newMesh;
}
気をつけるのは getNextEntry(); をやってあげないと、zip内が1ファイルだとしても読み込み準備ができないということ。
ちなみに複数ファイルを圧縮しちゃった場合は知らんぜよ。
これによって、2MぐらいのColladaファイルも圧縮したら200kぐらいになってくれたので、今まで読めなかったファイルも読めるようになったりしました。
いや、もう、Colladaはアニメーションで挫けたので今更ではあるんですが。
2011年9月30日金曜日
Assetsフォルダにアンダーバーから始まるファイルを置いてはいけない
はまった! 超ハマったので、殴り書きだけど記述しておく。
Androidでファイルを直接読み込みたい時にAssetsに入れておいて、
getResources().getAssets().open(filename);
って感じなんだけど、なんと、このfilenameはアンダーバーから始まるファイルはFileNotFoundException が飛んでしまうのだ。 なーーーんじゃそらー!!!!!!!!
アンダーバーから始まるファイルなんて普通じゃねぇか・・。 なんだこのうんこ仕様は・・・。
Androidでファイルを直接読み込みたい時にAssetsに入れておいて、
getResources().getAssets().open(filename);
って感じなんだけど、なんと、このfilenameはアンダーバーから始まるファイルはFileNotFoundException が飛んでしまうのだ。 なーーーんじゃそらー!!!!!!!!
アンダーバーから始まるファイルなんて普通じゃねぇか・・。 なんだこのうんこ仕様は・・・。
2011年9月19日月曜日
AndroidGameBaseのソース
ちょいちょいと整形してここに貼り付けてーーーってやってたんですが、複数クラスが絡みあってる部分が多くて無理があるので、全部アップロードしてみました。
本当はgoogle codeとか使えば良いような気もするんだけども。 なんかよくわからなかったので
axfcさんところに。
とーいっても、まだまだ作り途中なんですけど。
しかもコレだけ渡されても使い方分からないかもですが。 まぁ、なんかしらのヒントにはなるのかなーとか。
傾きセンサーあたりがまだ微妙なので修正中です。
それでは、良いandroidライフを。
本当はgoogle codeとか使えば良いような気もするんだけども。 なんかよくわからなかったので
axfcさんところに。
とーいっても、まだまだ作り途中なんですけど。
しかもコレだけ渡されても使い方分からないかもですが。 まぁ、なんかしらのヒントにはなるのかなーとか。
傾きセンサーあたりがまだ微妙なので修正中です。
それでは、良いandroidライフを。
2011年9月8日木曜日
フィードバックブラー
GREEのスマホゲームで、「ぶっとびハリー」って物理演算系の・・・
なんというか、「ア○グリーバードのパクリ」みたいなゲームがあるんですが、そのゲーム内で
シーンが切り替わる時に、なんかカッコイイエフェクト(前の画面が残像で残る感じ。 きっと加算合成)
ぽいのをやっているのです。
これは、俗にいうフィードバックブラーってやつですな。
いいなぁ。 ローコストでそれなりのエフェクトに見えるなぁ。
・・・・ということで。 DirectXで言うところのRenderTargetの切り替え。 OpenGLだとFrameBufferObjectで、フィードバックブラーのテストをしてみた。
方法としては、1フレーム前の画面キャプチャをちょっと薄くして重ねて、またキャプチャしておくーーってやつです。
ついでに、回転や拡大したものを重ねてあげるようにすれば派手になりますな。 もちろん見づらくなりますが。
ソースについては、また今度ー。
なんというか、「ア○グリーバードのパクリ」みたいなゲームがあるんですが、そのゲーム内で
シーンが切り替わる時に、なんかカッコイイエフェクト(前の画面が残像で残る感じ。 きっと加算合成)
ぽいのをやっているのです。
これは、俗にいうフィードバックブラーってやつですな。
いいなぁ。 ローコストでそれなりのエフェクトに見えるなぁ。
・・・・ということで。 DirectXで言うところのRenderTargetの切り替え。 OpenGLだとFrameBufferObjectで、フィードバックブラーのテストをしてみた。
方法としては、1フレーム前の画面キャプチャをちょっと薄くして重ねて、またキャプチャしておくーーってやつです。
ついでに、回転や拡大したものを重ねてあげるようにすれば派手になりますな。 もちろん見づらくなりますが。
ソースについては、また今度ー。
2011年7月13日水曜日
今更法線付けました
キューブを横10縦10奥行き10で1000個描画です(わざとバラつかせている)。
ちなみに、これは以前「弱い」と紹介したa9pad(別名opad renesas、さらに別名 N71 もうわけわからん。)で描画してます。
うーん。そこそこ出ているじゃないか。
と・・・。いうか・・・。
実は何の工夫も無しに負荷テストをやってみると、a9padの方がIconia TAB A500 よりFPSが高かったりします。
しっかり調べてないんですが、想像するにもともとの解像度が高い故に起きているんじゃないかと。
glViewportとかで機種毎の解像度の差を吸収しようとすると、この現象が起きると思う。
例をあげると、FF14ベンチでLow(1280x720)とHigh(1920x1080)をごっちゃにするようなもん。
なので、条件を一致させなきゃベンチマークとしての正当性が無くなっちゃうよなぁ。
解決案としては、同じサイズのFBOを作成して、FBOから取ってきたテクスチャを全画面にして描画・・・かなぁー。
もちろん、FBOを全画面に広げる際のコストは解像度によってかわるけどー。 まぁ、それは誤差レベルだと信じたい。
2011年7月6日水曜日
Iconia A500のスペックテストで3D描画をしてみた。
1体3600ポリ(3角)のグラドリエルたんを25体表示(色はランダムで乗算)テストでFPSは見ての通り13fps。
ふむん。
3600x25=90000ポリ? いや、でも行列セットのコストとか、カラーリングとか、テクスチャ切り替えとかあるから、単純にそうも言えないんですよね。
まぁ、でも、速い。 僕の持っている端末の中では当然ダントツ。
でも、あんまりスペックの高い端末で開発しても意味ないんだよなぁ。 低スペックの端末を切り捨てる気が無い限りは。
登録:
投稿 (Atom)


