Android: как объединить массив растровых изображений в одном растровом изображении? - PullRequest
1 голос
/ 28 июня 2010

Я пытаюсь сделать загрузчик карт для плиточного на Android .. до сих пор я мог разобрать файл tmx, захватить все данные тайлов и поместить их в двумерный массив, например, так: Bitmap tile [x] [y] ... это работает, и теперь я могу рендерить плиточные карты на андроиде, но только через этот массив плиток [] [], как показано ниже.

как я могу объединить в одном растровом изображении содержимое растрового массива?

вот мой метод рендеринга:

//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. так что я могу получить 1 большую большую картинку, представляющую карту, которую я загрузил и построил из файла tmx с плиткой ..

(обратите внимание, что ни одно растровое изображение, содержащееся в массиве picSource [] [], не находится в той же позиции .. нет никаких растровых изображений поверх других, они просто отображаются в виде сетки например, каждый - 32x32 растровое изображение в сетке 4x3. у каждого свое место на сетке ..)

спасибо за помощь

1 Ответ

0 голосов
/ 06 апреля 2011

Если кому-то еще интересно, я пишу, как я это сделал:

Класс MapLoader заполнил массив "block [x] [y] значением int для каждой плитки.

мы перебираем этот массив, ища все тайлы в pos: x, y со значением 169.

когда один найден, соответствующий битовый массив, взятый из листа тайлов (всегда один и тот же ... в том жепозиция на листе плиток: 0,0,16,16 это красная плитка 16x16, используемая для столкновений), рисуется во временное растровое изображение в том же положении pos.x, y, в котором находится цикл массива.цикл завершен, битовая карта collisionPicDest была построена из множества мелких деталей, слитых вместе в одном последнем изображении.

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..
    }
  }
...