📄 cowboy.java
字号:
package ch09;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
//该类负责绘制游戏主角牛仔娃娃
public class Cowboy
extends Sprite {
//每副图片宽度为32
static int WIDTH = 32;
//每副图片高度为48
static int HEIGHT = 48;
//主角动画构成图片展示顺序
static int[] FRAME_SEQUENCE = {
3, 2, 1, 2};
//声明一个代表牛仔娃娃游戏开始时的初始位置X坐标的变量
int myInitialX;
//声明一个代表牛仔娃娃处于走路未跳时的Y坐标的变量
int myInitialY;
//代表未跳起状态
int myNoJumpInt = -6;
//代表当前跳起的状态,即空中高度
int myIsJumping = myNoJumpInt;
//用于记录牛仔娃娃一跳的得分,即从下牛仔娃娃跳起后穿过的滚风草数量
int myScoreThisJump = 0;
/*
33.构造器
*/
public Cowboy(int initialX, int initialY) throws Exception {
super(Image.createImage("/icons/cowboy/cowboy.png"),
WIDTH, HEIGHT);
myInitialX = initialX;
myInitialY = initialY;
//设置引用象素位置为牛仔娃娃图像所在区域上边中点,
//目的是牛仔娃娃左右转向时,沿着中轴线变换位置可以保持不动。
defineReferencePixel(WIDTH / 2, 0);
setRefPixelPosition(myInitialX, myInitialY);
setFrameSequence(FRAME_SEQUENCE);
}
/*
34.检测牛仔娃娃和风滚草是否发生碰撞,在层管理类JumpManager的advance()方法中被调用
*/
int checkCollision(Tumbleweed tumbleweed) {
int retVal = 0;
if (collidesWith(tumbleweed, true)) {
retVal = 1; //碰一下,减少一分
//一旦风滚草被牛仔娃娃碰到,就被重置,再重新被使用
tumbleweed.reset();
}
return (retVal);
}
/*
35.重置牛仔娃娃状态,在层管理类JumpManager的reset()方法中被调用
*/
void reset() {
myIsJumping = myNoJumpInt;
setRefPixelPosition(myInitialX, myInitialY);
setFrameSequence(FRAME_SEQUENCE);
myScoreThisJump = 0;
setTransform(TRANS_NONE);
}
/*
36.改变牛仔娃娃动作状态,在层管理类JumpManager的advance()方法中被调用
*/
void advance(int tickCount, boolean left) {
if (left) {
setTransform(TRANS_MIRROR);
move( -1, 0);
}
else {
setTransform(TRANS_NONE);
move(1, 0);
}
//每隔3次绘制屏幕,刷新一次图像帧,
if (tickCount % 3 == 0) { //控制牛仔娃娃动作快慢
if (myIsJumping == myNoJumpInt) { //没跳情况下,调用行走图像序列下一帧图像
nextFrame();
}
else {
myIsJumping++;
//上升是加速过程,下降是减速的过程
if (myIsJumping < 0) { //向上跳
//通过设置参考象素点来改变牛仔娃娃垂直位置
setRefPixelPosition(getRefPixelX(),
getRefPixelY() - (2 << ( -myIsJumping)));
}
else { //向下落
if (myIsJumping != -myNoJumpInt - 1) {
setRefPixelPosition(getRefPixelX(),
getRefPixelY() + (2 << myIsJumping));
}
else {
//落会草地,重新进入行走状态
myIsJumping = myNoJumpInt;
setRefPixelPosition(getRefPixelX(), myInitialY);
setFrameSequence(FRAME_SEQUENCE);
//重置一跳的分数为初始0
myScoreThisJump = 0;
}
}
}
}
}
/*
37.控制牛仔娃娃跳起动作,在层管理类JumpManager的jump()方法中被调用
*/
void jump() {
if (myIsJumping == myNoJumpInt) {
myIsJumping++;
//从行走状态转为跳起状态
setFrameSequence(null);
setFrame(0);
}
}
/*
38.控制得分,在风滚草Tumbleweed类的advance()方法中被调用
*/
int increaseScoreThisJump() {
if (myScoreThisJump == 0) {
myScoreThisJump++;
}
else {
myScoreThisJump *= 2;
}
return (myScoreThisJump);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -