📄 grass.java
字号:
package ch09;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
//该类负责绘制草地背景图像
public class Grass
extends TiledLayer {
//每副图片宽度为20
static int TILE_WIDTH = 20;
//每颗草动画构成图片展示顺序
static int[] FRAME_SEQUENCE = {
2, 3, 2, 4};
//背景中放置草图片的水平个数
static int COLUMNS;
//用于控制草皮和草的间隔
static int CYCLE = 5;
//声明一个代表绘制背景草Y坐标的变量
static int TOP_Y;
//当前图像帧索引
int mySequenceIndex = 0;
//代表动态背景索引
int myAnimatedTileIndex;
/*
43.构造器
*/
public Grass() throws Exception {
super(setColumns(JumpCanvas.DISP_WIDTH), 1,
Image.createImage("/icons/cowboy/grass.png"),
TILE_WIDTH, TILE_WIDTH);
TOP_Y = JumpManager.DISP_HEIGHT - TILE_WIDTH;
setPosition(0, TOP_Y);
myAnimatedTileIndex = createAnimatedTile(2);//动态索引初始指向竖者的草
for (int i = 0; i < COLUMNS; i++) {
if ( (i % CYCLE == 0) || (i % CYCLE == 2)) {
setCell(i, 0, myAnimatedTileIndex);
}
else {
setCell(i, 0, 1);
}
}
}
/*
44.根据屏幕宽度,获取背景图片列数
*/
static int setColumns(int screenWidth) {
COLUMNS = ( (screenWidth / 20) + 1) * 3;//20为草图片区域的宽度
return (COLUMNS);
}
/*
45.重置背景草对象状态,在层管理类JumpManager的reset()方法中被调用
*/
void reset() {
setPosition( - (TILE_WIDTH * CYCLE), TOP_Y);
mySequenceIndex = 0;
setAnimatedTile(myAnimatedTileIndex, FRAME_SEQUENCE[mySequenceIndex]);
}
/*
46.改变背景草状态,在层管理类JumpManager的advance()方法中被调用
*/
void advance(int tickCount) {
if (tickCount % 2 == 0) { //控制草的速度
mySequenceIndex++;
mySequenceIndex %= 4;
setAnimatedTile(myAnimatedTileIndex, FRAME_SEQUENCE[mySequenceIndex]);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -