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

📄 fightingobject.java

📁 一款运行于手机的Java游戏神灯传奇源代码
💻 JAVA
字号:
package com.thinkenjoy.feitian;

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

import com.thinkenjoy.control.Control;
import com.thinkenjoy.tools.ImageSet;
import com.thinkenjoy.tools.Tools;

/**
 *
 * 可以发射子弹的物体
 */
public class FightingObject extends MovingObject {
  public static int start_height = 0;
  /**
   * 针对每30度向外发射一颗子弹而建立的X轴上的表
   */
  private static final int[] CYCLE_X_LABEL = {100, 86, 50, 0, -50, -86, -100};

  /**
   * 针对每30度向外发射一颗子弹而建立的Y轴上的表
   */
  private static final int[] CYCLE_Y_LABEL = {0, 50, 86, 100, 86, 50, 0};

  /**
   * 针对每60度全方向散射一颗子弹的Y轴坐标
   */
  private static final int[] CYCLE_X_LABEL60 = {100, 50, -50, -100, -50, 50,100};

  /**
   * 针对每60度全方向散射一颗子弹的X轴坐标
   */
  private static final int[] CYCLE_Y_LABEL60 = {0, 86, 86, 0, -86, -86, 0};

  /**
   * 子弹序列的ImageSet
   */
  public static ImageSet bulletImageSet;

  /**
   * 爆炸序列的ImageSet
   */
  public static ImageSet explodeImageSet;

  /**
   * 主角子弹的宽高
   */
  public static int[] bullet_Width = {12,18,23,27,27,33,16,28,36, 6,11,26};
  public static int[] bullet_Height= { 4,21,16, 3,11,17, 6,11,18, 6,14,13};

  /**
   * 子弹类型
   */
  protected int gunId;

  /**
   * 发射两组子弹的延迟
   */
  protected int delayShoot;

  /**
   * 当前物体的子弹威力
   */
  protected int bHitPower;

  /**
   * 子弹的速度
   */
  protected int bSpeed;

  /**
   * 子弹的宽度
   */
  protected int bWidth;

  /**
   * 子弹的长度
   */
  protected int bHeight;

  /**
   * 子弹发射的延迟
   */
  protected int bDelayShoot;

  /**
   * 是否已被消毁
   */
  protected boolean hasBeenDestroy = false;

  /**
   * 是否应该减血
   */
  protected boolean reduceEnergy = false;

  /**
   * 武器等级
   */
  protected static int gunLevel;

  /**
   * 当前的爆炸帧数
   */
  protected int curExpAniId;

  /**
   * 爆炸的时间延迟
   */
  protected int delayExpChange;

  public FightingObject(int type, int hitPow, int speedX, int speedY,
      int locX, int locY, int width, int height) {
    super(type, hitPow, speedX, speedY, locX, locY, width, height);
    if (bulletImageSet == null) {
      initialBullet();
    }
  }

  /**
   * 子弹图片初始化
   *
   */
  public static void initialBullet() {
    if (bulletImageSet == null) {
      explodeImageSet = new ImageSet(1);
      //#if NOK_QD
      //# bulletImageSet = new ImageSet(19);
      //# for(int i = 0; i<12; i++)  //主角子弹
      //# {
        //# Image[] bulletImage = new Image[1];
        //# bulletImage[0] = Tools.getImage("images/stuffs/bullet"+i);
        //# bulletImageSet.addState(bulletImage,50);
      //# }
      //# for(int i = 0; i<7; i++)  //敌人子弹
      //# {
        //# Image[] bulletImage = new Image[1];
        //# bulletImage[0] = Tools.getImage("images/stuffs/enemyBullet"+i);
        //# bulletImageSet.addState(bulletImage,50);
      //# }
      //#
      //# Image[] explodeImage = new Image[6]; //爆炸动画
      //# for(int i = 0; i<6; i++)
      //# {
        //# explodeImage[i] = Tools.getImage("images/stuffs/explode"+i);
      //# }
      //# explodeImageSet.addState(explodeImage,300);
      //#else
      bulletImageSet = new ImageSet(14);
      Image bulletImage = Tools.getImage("images/stuffs/bullet");
      Image enemyBulletImage = Tools.getImage("images/stuffs/enemyBullet");
      Image explodeImage = Tools.getImage("images/stuffs/explode");
        //#if NOK_7260 || NOK_7210 || NOK_6101
        //# bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,0,1,1,8,4),50);
        //# bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,5,1,1,13,13),50);
        //# bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,18,1,1,18,11),50);
//#
        //# bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,30,1,1,17,3),50);
        //# bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,34,1,1,19,8),50);
        //# bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,42,1,1,22,11),50);
//#
        //# bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,53,1,1,15,5),50);
        //# bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,58,1,1,20,9),50);
        //# bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,68,1,1,24,11),50);
//#
        //# bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,80,1,1,6,6),50);
        //# bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,87,1,1,8,9),50);
        //# bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,96,1,1,19,9),50);
        //#
        //# bulletImageSet.addState(ImageSet.extractFrames(enemyBulletImage,0,0,1,1,12,4),100);
        //# bulletImageSet.addState(ImageSet.extractFrames(enemyBulletImage,0,5,1,1,8,8),100);
        //# bulletImageSet.addState(ImageSet.extractFrames(enemyBulletImage,0,13,1,1,5,5),100);
        //# bulletImageSet.addState(ImageSet.extractFrames(enemyBulletImage,0,18,1,1,9,3),100);
        //# bulletImageSet.addState(ImageSet.extractFrames(enemyBulletImage,0,21,1,1,8,7),100);
        //# bulletImageSet.addState(ImageSet.extractFrames(enemyBulletImage,0,28,1,1,10,5),100);
        //# bulletImageSet.addState(ImageSet.extractFrames(enemyBulletImage,0,33,1,1,12,5),100);
        //# explodeImageSet.addState(ImageSet.extractFrames(explodeImage,0,0,6,1,15,15),300);
            //#
        //#else

        bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,0,1,1,12,4),50);
        bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,4+1,1,1,18,21-1),50);
        bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,25+1,1,1,23,16-1),50);

        bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,41+1,1,1,27,3-1),50);
        bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,44+1,1,1,27,11-1),50);
        bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,55+1,1,1,33,17-1),50);

        bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,72+1,1,1,16,6-1),50);
        bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,78+1,1,1,28,11-1),50);
        bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,89+1,1,1,36,18-1),50);

        bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,107+1,1,1,6,6-1),50);
        bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,113+1,1,1,11,14-1),50);
        bulletImageSet.addState(ImageSet.extractFrames(bulletImage,0,127+1,1,1,26,13-1),50);

        bulletImageSet.addState(ImageSet.extractFrames(enemyBulletImage,0,0,1,1,19,7),100);
        bulletImageSet.addState(ImageSet.extractFrames(enemyBulletImage,0,7,1,1,11,11),100);
        bulletImageSet.addState(ImageSet.extractFrames(enemyBulletImage,0,18,1,1,5,5),100);
        bulletImageSet.addState(ImageSet.extractFrames(enemyBulletImage,0,23,1,1,11,3),100);
        bulletImageSet.addState(ImageSet.extractFrames(enemyBulletImage,0,26,1,1,9,8),100);
        bulletImageSet.addState(ImageSet.extractFrames(enemyBulletImage,0,34,1,1,16,1),100);
        bulletImageSet.addState(ImageSet.extractFrames(enemyBulletImage,0,35,1,1,16,1),100);
        bulletImageSet.addState(ImageSet.extractFrames(enemyBulletImage,0,36,1,1,16,1),100);
        bulletImageSet.addState(ImageSet.extractFrames(enemyBulletImage,0,37,1,1,16,1),100);
        bulletImageSet.addState(ImageSet.extractFrames(enemyBulletImage,0,38,1,1,16,1),100);
        bulletImageSet.addState(ImageSet.extractFrames(enemyBulletImage,0,39,1,1,12,5),100);
        explodeImageSet.addState(ImageSet.extractFrames(explodeImage,0,0,6,1,27,27),300);
        //#endif

        enemyBulletImage = null;
      //#endif
      //图片回收
      System.gc();
    }
  }
  /**
   * 重置
   */
  public void reset() {
    super.reset();
    hasBeenDestroy = false;
    reduceEnergy = false;
    curExpAniId = 0;
    super.energy = 0;
    delayShoot = 0;
  }

  public void cycle() {
    if (delayShoot > 0)
      delayShoot--;
  }

  /**
   * 初始化子弹的相应属性值
   *
   * @param type
   *            类型
   * @param hitPow
   *            威力
   * @param speedX
   *            X速度
   * @param speedY
   *            Y速度
   * @param width
   *            宽度
   * @param height
   *            高度
   */
  public void initialBullet(int type, int hitPow, int speedX, int speedY,
      int width, int height) {
    gunId = type;
    bHitPower = hitPow;
    bSpeed = speedX;
    bWidth = width;
    bHeight = height;
  }

  /**
   * 直接向前发射一颗子弹
   *
   * @param bulletPool
   * @param type
   * @param bHitPower
   * @param bSpeedX
   * @param bSpeedY
   * @param bLocX
   * @param bLocY
   * @param bWidth
   * @param bHeight
   */
  public void fireBullet(MovingObjectPool bulletPool, int type,
                         int bHitPower, int bSpeedX, int bSpeedY, int bLocX, int bLocY,
                         int bWidth, int bHeight) {
    MovingObject bullet = bulletPool.getNextFree();
    bullet.initial(type, bHitPower, bSpeedX, bSpeedY, bLocX, bLocY, bWidth,bHeight);
    setAnimate(bullet);
  }

  /**
   * 减少移动物体的生命值
   *
   * @param decrease
   * @return
   */
  public int reduceEnergy(int decrease) {
    reduceEnergy = true;
    return super.energy -= decrease;
  }

  /**
   * 物体是否被消灭
   */
  public boolean isDestroy() {
    return hasBeenDestroy;
  }

  public void setDestroy(boolean isDestroy) {
    if(hasBeenDestroy){
      System.out.println("setTrue");
    }
    hasBeenDestroy = isDestroy;
  }

  /**
   * 是否已消亡掉
   *
   * @return
   */
  public boolean isDead() {
    return super.energy <= 0 || hasBeenDestroy;
  }

  /**
   * 获得物体当前的生命值
   *
   * @return
   */
  public int getEnergy() {
    return super.energy;
  }

  /**
   * 设置物体当前的生命值
   *
   * @param newEnergy
   */
  public void setEnergy(int newEnergy) {
    super.energy = newEnergy;
  }

  /**
   * 主要是绘制子弹
   *
   * @param g
   */
  public void drawBullet(Graphics g, MovingObject bullet) {
    int posX = 0;
    int posY = 0;
    posX = bullet.getLocationX();
    posY = bullet.getLocationY();
    switch (bullet.getType()) { //bullet[i].getType()也就是相应的gunID
    default:
      bulletImageSet.draw(g, bullet.getType(), 0,posX, posY);
      break;
    case 0:
    case 1:
    case 2:
    case 3:
    //	bulletImageSet.draw(g,0,0,posX,posY);
        if(gunLevel > 2)
        {
          bulletImageSet.draw(g, bullet.getType()*3+2, 0, posX, posY+5);
        }else
        {
          //bulletImageSet.draw(g, gunId, gunLevel-1, posX, posY);
          bulletImageSet.draw(g, bullet.getType()*3+gunLevel-1, 0, posX, posY+5);
        }
      break;
    }
  }

  /**
   * 设置子弹动画的相应值(对应的动画)
   *
   * @param bulletArg
   */
  private void setAnimate(MovingObject bulletArg) {
    bulletArg.imageSet = bulletImageSet;
    bulletArg.currentFrame = 0;
    switch (bulletArg.getType()) { //bullet[i].getType()也就是相应的gunID
    default:
      bulletArg.currentState = 0;
    break;
    case 0:
      //bulletArg.currentState = bulletArg.getType() - BULLET_01;
      break;
    }
  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -