私は Android にはかなり慣れていませんが、タイル ベースのゲームを試してみたいと思っていました。このゲームでは、正方形ごとにマップ内を移動します。
ただし、多くのリソースを開く際に問題が発生しています。今のところ、各タイルに同じ画像を使用しています (ただし、将来的には明らかに変更される予定です)。
問題は、適切なサイズのマップをこのコードで作成する場合です。
mBitmap = BitmapFactory.decodeStream(new BufferedInputStream(res.openRawResource(R.drawable.tile)));
mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight());
canvas.drawBitmap(mBitmap, mX, mY, null);
エミュレート時にエラーが発生しています...
エミュレーター/電話のメモリが限られていることは理解していますが、20x20タイルを保持するのに十分だと思いましたか?
-もっと大きなマップが欲しいと思っていましたが、考えられる唯一の回避策は、タイルが見えなくなったらそれらを破壊し、タイルが見えてきたら(移動すると)新しいタイルを描画することです
私はここでそれをやろうとしました:
if (tile.mX > 100 && tile.mX < 600){
tile.mBitmap = null;
} else {
//draw it with code above
}
したがって、上記のコードは、配列内の各タイル (フレームごと) をループし、特定の X 座標内にあるタイルのみを描画します。
これがそれを行う「方法」であるかどうか疑問に思っていましたか?-移動するたびにビットマップを開いて無効にしますか? それとももっと簡単な方法がありますか?プログラムをより効率的にするヌルよりもビットマップを破壊するコマンドを見逃していませんか?
プログラムはエミュレータ上で非常に遅く実行されますが、これは問題ですか? -または、エミュレーターでフレームごとに多くのビットマップをロードすると遅くなると想定しても安全ですか? 電話デバイスではまだ遅くなりますか?
ヒント/ヘルプは素晴らしいでしょう、ありがとう!