基于J2ME WTK的2D手机游戏开发(英文文献翻译) 第7页
1、TRANS_NONE: 没有进行转动和翻转;
2、TRANS_ROT90: 90度转动;
3、TRANS_ROT180: 180度转动;
4、TRANS_ROT270: 270度转动;
5、TRANS_MIRROR: 左右翻转;
6、TRANS_MIRROR_ROT90: 左右翻转后90度转动;
7、TRANS_MIRROR_ROT180: 左右翻转后180度转动;
8、TRANS_MIRROR_ROT270: 左右翻转后270度转动。
如设定精灵左右翻转如下:
this.setTransform(Sprite.TRANS_MIRROR);// 左右翻转
4.2.4地图的画法
在地图类Map中继承了TiledLayer类,该类的作用是用于构建游戏地图。游戏中除了精灵的活动之外,还需要有背景地图,使得精灵在地图上走动形成逼真的环境效果,因此MIDP2.0提供我们用于构建游戏地图的TiledLayer类,我们能使用TiledLayer容易的构建形象美观的各种地图背景。用TiledLayer的重要方法如下:
1、TiledLayer是一个将tiled平铺于格子状排列着的cell中,通过使用图片填满整站地图中的cell从而形成一张游戏地图的类。如图4-4和4-5。
图4-4 分散的地图块 图4-5 拼好的地图
2、Map的构造方法为:
public Map(int cols, int row, Image img, int tiledWidth, int tiledHeight,
int level, int mapIndex) {
super(cols, row, img, tiledWidth, tiledHeight);
}
其中参数cols、row指定了图层中cell横向和纵向的个数,image指定了在图层中使用的图片Image对象,tiledWidth和tiledHeight则分别指定了image中小图片的尺寸,level、mapIndex第几关的第几层图片。
image对象跟Sprite中一样,由多张不同形态的小图片组成,从构造方法中可以看出,TiledLayer类在构造出自身大小的同时,能对image进行分割。
3、画地图
构建出地图大小跟分割图片后,将分割后的图片组装到地图中的各个cell中的过程这里叫贴砖。使用的方法是setCell(int col,int row,int tiledIndex),就是在地图的第col列和第row行的地方贴上第tiledIndex张图片,当全部cell被贴完则形成了我们想得到的游戏地图。通常情况下,地图中的cells我们用二维数组来存储排列情况,并通过一个二维循环来完成贴砖任务。但由于游戏中的地图都是很大的,如果直接定义数组,就会占用很大空间,所以把数组转成txt文本格式,让程序去里面读取。如下:
public void readMap(int level, int mapIndex) {//画地图
byte[][] map = null;//定义map二维数组
int no = 1;
String fileName = "/map/map" + level + "_" + mapIndex + ".txt";
map = readFile(fileName);
for (int i = 0; i < AIN.length; i++) {
AIN[i] = this.createAnimatedTile(no++);//标记新创建的动态贴//图,索引号总是负数,第一次的为-1,第二次为-2... 静态贴图可以通//过调用setAnimatedTile(int, int)方法来改变.
}
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[0].length; j++) {
setCell(j, i, map[i][j]);//贴地图
}
}
}
public byte[][] readFile(String URL) {//读取地图txt文本数组方法,URL
//为传入的txt文本
InputStream is = this.getClass().getResourceAsStream(URL);//输入流
DataInputStream data1 = new DataInputStream(is);//开辟新的数据空间
short hang = 0;
short lie = 0;
try {
hang = data1.readShort();
lie = data1.readShort();
data = new byte[hang][lie];
for (int i = 0; i < hang; i++) {
for (int j = 0; j < lie; j++) {
data[i][j] = data1.readByte();
}
}
is.close();//关闭输入流
} catch (Exception e) {
}
return data;//返回比特型数据data
}
public void getAnimation() {// 将要改变的图片赋上固定值
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < data[0].length; j++) {
switch (data[i][j]) {
case 55:
data[i][j] = -1;
break;
case 56:
data[i][j] = -2;
break;
case 65:
data[i][j] = -3;
break;
case 66:
data[i][j] = -4;
break;
case 75:
data[i][j] = -5;
break;
case 76:
data[i][j] = -6;
break;
}
}
}
}
public void update() {
aniCounter = ++aniCounter % 3;
for (int i = 0; i < map_num.length; i++) {
this.setAnimatedTile(AIN[i], map_num[i] + aniCounter * 2);
//使AIN[i]中图片动态变化
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>