早期使用 Sprite 疊加背景圖塊,程式碼冗長且難以從地圖資料動態生成。MIDP 2.0 引入 javax.microedition.lcdui.game.TiledLayer,專為圖塊地圖設計,極大簡化開發。
Image tileset = Image.createImage("/res/img/tile.png");TiledLayer layer = new TiledLayer(22, 22, tileset, 8, 8); // 22×22 格,每格 8×8
int[][] map = {
{0,0,1,4},
{1,1,2,4},
{0,1,2,4},
{0,1,1,3}
};
for (int row = 0; row < map.length; row++) {
for (int col = 0; col < map[row].length; col++) {
layer.setCell(col, row, map[row][col]); // col, row, tileIndex
}
}
layer.paint(g); (g 為 Graphics 物件)public class TankGameCanvas extends GameCanvas implements Runnable {
private TiledLayer layerBackground;
public TankGameCanvas() {
super(false); // 關閉鍵盤事件自動繪製
try {
Image tileset = Image.createImage("/res/img/tile.png");
layerBackground = new TiledLayer(22, 22, tileset, 8, 8);
// 常數定義
final int EMP=0, ICE=1, BRK=2, ROC=3, RIV=4, TRE=5;
int[][] map = new int[22][22];
// 填充地圖資料 (此處省略冗長陣列初始化)
// ...
for (int r = 0; r < 22; r++)
for (int c = 0; c < 22; c++)
layerBackground.setCell(c, r, map[r][c]);
} catch (IOException e) { e.printStackTrace(); }
}
protected void paint(Graphics g) {
layerBackground.paint(g); // 一行繪製整張地圖
// 繪製坦克、子彈等 Sprite...
}
}
setCell() 可即時改變圖塊 (如炸毀磚塊變透明)。