2010-06-28 71 views
1

我試圖做一個地圖加載器平鋪,在Android .. 到目前爲止,我可以解析tmx文件,抓住所有的瓷磚數據,並把它們放在一個2維的數組,像這樣:位圖瓷磚[x] [y] ... 它的工作原理,我現在可以在Android上渲染平鋪地圖,但只能通過交互通過該瓷磚[] []數組,如下所示。android:如何將一個位圖數組合並在一個位圖中?

我怎樣才能合併在一個單一的位圖一個位圖數組的內容?

這裏是我的渲染方法:

//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到itterate [X] [Y]抓住所有的 位圖,並把它們全部picDest。所以我可以得到1個單一的大圖,代表我已經從平鋪的tmx文件加載並構建的地圖。

(注意,picSource [] []數組中包含的位圖不在同一個位置。 有任何其他的頂部沒有位圖,他們只是顯示在網格中 各是一個4x3的網格例如32×32位圖.. 網格上的每一個自己的點..)

感謝幫助

+1

這種列表上的操作是所謂的函數式編程(採用通用的操作相結合的元素)「摺疊」,你可能會發現在這會爲你 – bandi 2010-06-28 06:31:05

+0

有多大這種瓷磚的標準庫的東西嗎?對於圖像處理和操作,我通常使用NDK的本地方法。我不知道速度是否會成爲您的問題。 我希望它有幫助,再見。 – SlowTree 2011-03-30 15:54:20

回答

0

如果有人想知道,我張貼我是怎麼做到的:

MapLoader類爲每個圖塊填充了數組「block [x] [y]」的一個int值。通過該數組

我們循環,尋找在pos所有瓦片:X,Y帶有值169.

當找到一個,對應的位圖,從 採取tilesheet (送花兒給人的同一個..在瓷磚上的相同位置:0,0,16,16它是一個用於碰撞的16x16紅色瓷磚), 被繪製到臨時位圖上,位置與數組循環所在的位置相同。

當循環退出時,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.. 
    } 
    } 
相關問題