怎么样使用Game API创建2D动作游戏?

怎么样使用Game API创建2D动作游戏?

(接上文)

游戏场景就像洋葱头

典型的2D动作游戏包括一个背景和一些活动的人物.尽管你可以自己来画这样的场景,Game API能让你用layers 来创建场景. 你可以用一个layer来做城市的背景,另一个来做一辆汽车. 将汽车层放到背景层上方就完成了整个的场景. 将汽车做为一个独立于背景和场景中的其它层的层会使对它的操作变得简单.

Game API 通过下面的四个类提供了灵活的对层的支持:

  • Layer 是所有层的抽象父类. 它定义了层的基本属性,包括位置,大小以及是否可见. 每个Layer 的子类必须定义paint() 方法用来在Graphics 上绘制该层. 它的两个具体的子类, TiledLayer Sprite, 应该会满足对2D游戏的需求.
  • TiledLayer 在创建背景图时会被用到. 你可以用一组小块儿的图片来高效地创建大幅的背景图.
  • Sprite 是会动的层. 你提供每个动作()的图片然后对它的活动进行完全的控制. Sprite 同时还提供对每个帧的镜像翻转和90°倍数旋转的功能.
  • LayerManager 是一个非常顺手的类,它记录你的场景中所有的层. 只需调用LayerManagerpaint() 方法就可以绘制它所包括的所有层.

使用 TiledLayer

TiledLayer 很简单, 尽管乍一看有些深入的地方不好理解. 最主要的思想就是一个图片源提供一组tiles (切片)用于组成一个大的场景. 例如, 下面的图片尺寸为64 x 48.

怎么样使用Game API创建2D动作游戏?
图片源

这个图片可以分为12个切片,每个大小为16 x 16 像素. TiledLayer 为每个切片分配一个编号, 从左上角开始为1. 图片源中的切片编号如下所示:

怎么样使用Game API创建2D动作游戏?
切片编号

编码来创建一个TiledLayer 是想当容易的. 你需要指定行数和列数, 图片源, 以及每个切片的大小. 这段代码说明了如何加载图片源并创建一个TiledLayer.

 

Image image = Image.createImage("/board.png");

TiledLayer tiledLayer = new TiledLayer(10, 10, image, 16, 16);



在例子中, 新创建的 TiledLayer 10 10 . 每个切片大小为16像素正方.

引人入胜的部分在于如何用这些切片创建场景. 要想为场景中的一个格分配一个切片,应使用setCell()方法. 你需要提供格的行和列位置以及切片的编号. 例如,你想将切片5分配给第2行第3列的格子,就应该使用setCell(2, 1, 5). 如果你看着这几个参数别扭,请注意切片编号从1开始,而格子的行和列编号从0开始. 新建的TiledLayer 中每个格的默认的切片编号为0, 这表明它们是空的.

下面的代码段演示了一种使用int数组创建TiledLayer的方法.在真正的游戏中, TiledLayers 应该由资源文件定义,这样可以更灵活地定义背景以及为游戏扩展新的地图或者级别等.

 

private TiledLayer createBoard() {

Image image = null;

try { image = Image.createImage("/board.png"); }

catch (IOException ioe) { return null; }

TiledLayer tiledLayer = new TiledLayer(10, 10, image, 16, 16);

int[] map = {

1, 1, 1, 1, 11, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, <span lang="EN" style="