📄 fightingobject.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 + -