1

Android でタイル用のマップ ローダーを作成しようとしています。これまでのところ、tmx ファイルを解析し、すべてのタイル データを取得して、次のように 2 次元配列に入れることができました: Bitmap tiles[x][y] ...動作し、Androidでタイルマップをレンダリングできるようになりましたが、以下に示すように、その tiles[][] 配列を介して対話することによってのみ..

ビットマップ配列のコンテンツを 1 つのビットマップにマージするにはどうすればよいですか?

ここに私のレンダリング方法があります:

//here's what i have:
for (int x = 0; x < MapLoader.width; x++) {
  for (int y = 0; y < MapLoader.height; y++) {
    g.drawBitmap( picSource[x][y], posX, posY, BitmapPaint);
  }
}

//and here's what i'd like to have:
g.drawBitmap( picDest, posX, posY, BitmapPaint);

picSource[x][y] を反復処理して、すべてのビットマップを取得し、すべて picDest に配置します。そのため、タイル化された tmx ファイルから読み込んで構築したマップを表す 1 つの大きな写真を取得できます。

( picSource[][] 配列に含まれるビットマップが同じ位置に配置されていないことに注意してください..他のビットマップの上にビットマップはありません。グリッドに表示されるだけで、それぞれが 4x3 グリッドの 32x32 ビットマップです。 .. グリッド上のそれぞれの独自のスポット .. )

助けてくれてありがとう

4

2 に答える 2

0

他の誰かが疑問に思っている場合に備えて、私はそれをどのように行ったかを投稿しています:

MapLoader クラスは、配列 "block[x][y] に各タイルの int 値を入力しました。

その配列をループして、pos:x,y で値が 169 のすべてのタイルを探します。

見つかった場合、タイルシートから取得した対応するビットマップ (常に同じもの..タイルシートの同じ位置: 0,0,16,16、衝突に使用される 16x16 の赤いタイル) が一時的なビットマップに描画されます。配列ループがあるのと同じpos.x、y。

ループが終了すると、collisionPicDest ビットマップが構築され、多数の小さなパーツが 1 つの最終的な写真にブレンドされます。

collisionSheet = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.collision16);
collisionPic = new Bitmap[width][height];
collisionPicDest = Bitmap.createBitmap(width*tileSize, height*tileSize, Bitmap.Config.RGB_565);
collisionCanvas = new Canvas(collisionPicDest());
// ===============
// collision layer
// ===============
for (int y = 0; y < height; y++) {
  for (int x = 0; x < width; x++) {

    tileNbr = MapLoader.block[x][y];


    switch(tileNbr){
    case 169:
      // ============
      // normal block
      // ============
      collisionPic[x][y]= Bitmap.createBitmap(collisionSheet, 0, 0, tileSize, tileSize);
      collisionCanvas.drawBitmap(collisionPic[x][y],x*tileSize,y*tileSize,bitmapPaint);
      break;

      // do other cases..
    }
  }
于 2011-04-05T23:12:56.137 に答える