⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cowboy.java

📁 本光盘是《J2ME无线移动游戏开发》一书的配套光盘
💻 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 + -