📄 jumpmanager.java
字号:
package ch09;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
public class JumpManager
extends javax.microedition.lcdui.game.LayerManager {
//声明一个代表屏幕左上角X坐标的变量
static int CANVAS_X;
//声明一个代表画布左上角Y坐标的变量
static int CANVAS_Y;
//声明一个代表画布宽度的变量,其等于屏幕宽度DISP_WIDTH
static int DISP_WIDTH;
//声明一个代表画布高度的变量,其等于DISP_HEIGHT - FONT_HEIGHT * 2 -GROUND_HEIGHT
static int DISP_HEIGHT;
//声明一个代表游戏主角牛仔娃娃的Sprite对象
Cowboy myCowboy;
//声明一个存储游戏中向左滚动的风滚草Sprite对象的数组
Tumbleweed[] myLeftTumbleweeds;
//声明一个存储游戏中向右滚动的风滚草Sprite对象的数组
Tumbleweed[] myRightTumbleweeds;
//声明一个代表草地背景的TiledLayer对象
Grass myGrass;
//声明一个代表左右方向的变量
boolean myLeft;
//可视区域左边界的X坐标
int myCurrentLeftX;
/*
26.构造器
*/
public JumpManager(int x, int y, int width, int height) {
CANVAS_X = x;
CANVAS_Y = y;
DISP_WIDTH = width;
DISP_HEIGHT = height;
myCurrentLeftX = Grass.CYCLE * Grass.TILE_WIDTH;
setViewWindow(0, 0, DISP_WIDTH, DISP_HEIGHT);
}
/*
27.绘制方法
*/
public void paint(Graphics g) throws Exception {
//创建、添加牛仔娃娃图层
if (myCowboy == null) {
myCowboy = new Cowboy(myCurrentLeftX + DISP_WIDTH / 2,
DISP_HEIGHT - Cowboy.HEIGHT - 2);
append(myCowboy);
}
//创建、添加左风滚草图层,一次创建两个风滚草
if (myLeftTumbleweeds == null) {
myLeftTumbleweeds = new Tumbleweed[2];
for (int i = 0; i < myLeftTumbleweeds.length; i++) {
myLeftTumbleweeds[i] = new Tumbleweed(true);
append(myLeftTumbleweeds[i]);
}
}
//创建、添加右风滚草图层,一次创建两个风滚草
if (myRightTumbleweeds == null) {
myRightTumbleweeds = new Tumbleweed[2];
for (int i = 0; i < myRightTumbleweeds.length; i++) {
myRightTumbleweeds[i] = new Tumbleweed(false);
append(myRightTumbleweeds[i]);
}
}
//创建、添加草地背景图层
if (myGrass == null) {
myGrass = new Grass();
append(myGrass);
}
setViewWindow(myCurrentLeftX, 0, DISP_WIDTH, DISP_HEIGHT);
paint(g, CANVAS_X, CANVAS_Y);
}
/*
28.设置游戏角色方向,在绘制类JumpCanvas的checkKeys()方法中被调用
*/
void setLeft(boolean left) {
myLeft = left;
}
/*
29.调用牛仔娃娃向上跳方法,在绘制类JumpCanvas的checkKeys()方法中被调用
*/
void jump() {
myCowboy.jump();
}
/*
30.重新初始化游戏中各角色设置,在绘制类JumpCanvas的reset()方法中被调用
*/
void reset() {
if (myGrass != null) {
myGrass.reset();
}
if (myCowboy != null) {
myCowboy.reset();
}
if (myLeftTumbleweeds != null) {
for (int i = 0; i < myLeftTumbleweeds.length; i++) {
myLeftTumbleweeds[i].reset();
}
}
if (myRightTumbleweeds != null) {
for (int i = 0; i < myRightTumbleweeds.length; i++) {
myRightTumbleweeds[i].reset();
}
}
myLeft = false;
myCurrentLeftX = Grass.CYCLE * Grass.TILE_WIDTH;
}
/*
31.启动游戏中各角色,获取得分,在绘制类JumpCanvas的advance()方法中被调用
*/
int advance(int gameTicks) {
int retVal = 0;
if (myLeft) {
myCurrentLeftX--;
}
else {
myCurrentLeftX++;
}
myGrass.advance(gameTicks);
myCowboy.advance(gameTicks, myLeft);
for (int i = 0; i < myLeftTumbleweeds.length; i++) {
retVal += myLeftTumbleweeds[i].advance(myCowboy, gameTicks,
myLeft, myCurrentLeftX,
myCurrentLeftX + DISP_WIDTH);
retVal -= myCowboy.checkCollision(myLeftTumbleweeds[i]);
}
for (int i = 0; i < myLeftTumbleweeds.length; i++) {
retVal += myRightTumbleweeds[i].advance(myCowboy, gameTicks,
myLeft, myCurrentLeftX,
myCurrentLeftX + DISP_WIDTH);
retVal -= myCowboy.checkCollision(myRightTumbleweeds[i]);
}
return (retVal);
}
/*
32.滚屏
*/
void wrap() {
if (myCurrentLeftX % (Grass.TILE_WIDTH * Grass.CYCLE) == 0) {
if (myLeft) {
myCowboy.move(Grass.TILE_WIDTH * Grass.CYCLE, 0);
myCurrentLeftX += (Grass.TILE_WIDTH * Grass.CYCLE);
for (int i = 0; i < myLeftTumbleweeds.length; i++) {
myLeftTumbleweeds[i].move(Grass.TILE_WIDTH * Grass.CYCLE, 0);
}
for (int i = 0; i < myRightTumbleweeds.length; i++) {
myRightTumbleweeds[i].move(Grass.TILE_WIDTH * Grass.CYCLE, 0);
}
}
else {
myCowboy.move( - (Grass.TILE_WIDTH * Grass.CYCLE), 0);
myCurrentLeftX -= (Grass.TILE_WIDTH * Grass.CYCLE);
for (int i = 0; i < myLeftTumbleweeds.length; i++) {
myLeftTumbleweeds[i].move( -Grass.TILE_WIDTH * Grass.CYCLE, 0);
}
for (int i = 0; i < myRightTumbleweeds.length; i++) {
myRightTumbleweeds[i].move( -Grass.TILE_WIDTH * Grass.CYCLE, 0);
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -