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

📄 jumpmanager.java

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