构建J2ME游戏:用TiledLayer构造背景
在这一节中,我们要使用TiledLayer类为游戏添加一个背景。游戏界面分为三个区域:顶部表示天空,couple小精灵所在的中部是地面,底部是大海。每个区域分别使用一个32*32像素的不同颜色图片进行填充,填充的工作由TiledLayer类完成。
首先将屏幕分成32*32的小方格,行和列的索引都从0开始,如图4。
图 4. 均匀分割屏幕
(0,0)到(1,4)的方格表示天空,(2,0)到(2,4)表示地面,(3,0)到(4,4)表示海面。我们用图5中的图片填充对应方格。
图 5. 背景图片
背景图片的第一部分(32*32)表示地面,第二部分表示大海,第三部分表示天空。使用TiledLayer时,图片的索引是从1开始的(不是0,所以地面图像的位置是1,大海是2,天空是3)。TiledLayer类可以将图5分割成三张图片,然后用每张图片填充对应的方格。在这里,我们用三个 32*32大小图片填充5行5列的背景,部分代码如下:
// 加载图片
backgroundImg = Image.createImage("/tiledLayer1.gif");
// 创建TiledLayer背景
background = new TiledLayer(5, 5, backgroundImg, 32, 32);
TiledLayer构造器的前两个参数表示背景大小,第三个是图像,最后两个是每个格子的长和宽。TiledLayer类将根据格子的大小切割图像,然后放到背景的对应方格中。
最后剩下的就是设置每个方格里放置的图像了。创建背景的所有代码都在createBackground()方法里,如下所示。在MyGameCanvas 类的start()里调用这个方法,然后在buildGameScreen()方法的最后添加background.paint(g),这使得 TiledLayer实例将自己绘制到屏幕上。
// 使用TiledLayer创建背景
private void createBackground() throws IOException
{
// 加载图片
backgroundImg = Image.createImage("/tiledLayer1.gif");
// 创建tiledLayer背景
background = new TiledLayer(5, 5, backgroundImg, 32, 32);
// 布置图像的数组
int[] cells = {
3, 3, 3, 3, 3, // 天空
3, 3, 3, 3, 3, // 天空
1, 1, 1, 1, 1, // 地面
2, 2, 2, 2, 2, // 大海
2, 2, 2, 2, 2 // 大海
};
// 设置背景
for(int i = 0; i < cells.length; i++)
{
int column = i % 5;
int row = (i - column) / 5;
background.setCell(column, row, cells[i]);
}
// 设置背景位置
background.setPosition(GAME_ORIGIN_X, GAME_ORIGIN_Y);
}
最终效果如图6。
图 6. 添加了背景的游戏截屏
原文见:http://today.java.net/pub/a/today/2005/07/07/j2me3.html?page=4
版权所有 罗明