📄 bullet.java
字号:
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.Sprite;
public class Bullet extends Actor{
public void init(String ImageName) {
bulletImage = new CImage(ImageName);
}
public void init(String ImageName, int clipwidth, int clipheight, int cols,
int rows) {
bulletImage = new CImage(ImageName, clipwidth, clipheight, cols, rows);
}
public void clean() {
bulletImage.clean();
bulletImage = null;
}
public void changeMyState() {
setIPosX(iPosX + xSpeed);
setIPosY(iPosY - ySpeed);
}
//判断物体是动作档画法与子弹是TOPLEFT画法的碰撞
public boolean isCollideInTopLeft(Actor battlePlane,Actor bullet){
// rMLeftX 为矩形的左上X坐标
int rMLeftX = (battlePlane.getIPosX() - (battlePlane.getIWidth() >> 1)) >> 8;
// rMLeftY 为矩形的左上Y坐标
int rMLeftY = (battlePlane.getIPosY() - battlePlane.getIHeight()) >> 8;
int rBLeftX = bullet.getIPosX() >> 8;
int rBLeftY = bullet.getIPosY() >> 8;
return Tool.isIntersectingRect(rMLeftX, rMLeftY, battlePlane
.getIWidth() >> 8, battlePlane.getIHeight() >> 8, rBLeftX,
rBLeftY, bullet.getIWidth() >> 8, bullet.getIHeight() >> 8);
}
// 判断主角与子弹是CENTER画法的碰撞
public boolean isCollideInCenter(Actor battlePlane, Actor bullet) {
// rMLeftX 为矩形的左上X坐标
int rMLeftX = (battlePlane.getIPosX() - (battlePlane.getIWidth() >> 1)) >> 8;
// rMLeftY 为矩形的左上Y坐标
int rMLeftY = (battlePlane.getIPosY() - battlePlane.getIHeight()) >> 8;
// rBLeftX 为子弹矩形左上X坐标
int rBLeftX = (bullet.getIPosX() - (bullet.getIWidth() >> 1)) >> 8;
// rBLeftY 为子弹矩形左上Y坐标
int rBLeftY = (bullet.getIPosY() - bullet.getIHeight()) >> 8;
return Tool.isIntersectingRect(rMLeftX, rMLeftY, battlePlane
.getIWidth() >> 8, battlePlane.getIHeight() >> 8, rBLeftX,
rBLeftY, bullet.getIWidth() >> 8, bullet.getIHeight() >> 8);
}
public void drawClipImage(Graphics graphics) {
bulletImage.drawClipImage(graphics, iPosX >> 8, iPosY >> 8,
GameConstant.TOPLEFT);
}
//画跟踪的轨迹的画法
public void drawRegionImage(Graphics graphics) {
int tan = 0;
if (xSpeed != 0) {
tan = (ySpeed << 8) / xSpeed;
}
if(ySpeed > 0 && (tan > 618 || tan <= -618)){
// 子弹指向90度方向
// bulletImage.drawImage(graphics, 0, 12, 17, 6,
// GameConstant.TRANS_ROT270, iPosX >> 8, iPosY >> 8,
// GameConstant.TOPLEFT);
bulletImage.drawRegionImage(graphics, 0, 12, 17, 6,
Sprite.TRANS_ROT270, iPosX >> 8, iPosY >> 8,
GameConstant.TOPLEFT);
// setIWidth(3 << 8);
// setIHeight(17 << 8);
}else if(ySpeed < 0 && (tan > 618 || tan <= -618)){
// 子弹指向270度方向
// bulletImage.drawImage(graphics, 0, 12, 17, 6,
// GameConstant.TRANS_ROT90, iPosX >> 8, iPosY >> 8,
// GameConstant.TOPLEFT);
bulletImage.drawRegionImage(graphics, 0, 12, 17, 6,
Sprite.TRANS_ROT90, iPosX >> 8, iPosY >> 8,
GameConstant.TOPLEFT);
// setIWidth(3 << 8);
// setIHeight(17 << 8);
}
if (xSpeed > 0) {
if (tan > -106 && tan <= 106) {
// 子弹指向0度方向
// bulletImage.drawImage(graphics, 0, 12, 17, 6,
// GameConstant.TRANS_NONE, iPosX >> 8, iPosY >> 8,
// GameConstant.TOPLEFT);
bulletImage.drawRegionImage(graphics, 0, 12, 17, 6,
Sprite.TRANS_NONE, iPosX >> 8, iPosY >> 8,
GameConstant.TOPLEFT);
// setIWidth(17 << 8);
// setIHeight(3 << 8);
} else if (tan > 106 && tan <= 618) {
// 子弹指向45度方向
// bulletImage.drawImage(graphics, 0, 0, 17, 12,
// GameConstant.TRANS_NONE, iPosX >> 8, iPosY >> 8,
// GameConstant.TOPLEFT);
bulletImage.drawRegionImage(graphics, 0, 0, 17, 12,
Sprite.TRANS_NONE, iPosX >> 8, iPosY >> 8,
GameConstant.TOPLEFT);
// setIWidth(13 << 8);
// setIHeight(13 << 8);
} else if (tan > -618 && tan <= -106) {
// 子弹指向315度方向
// bulletImage.drawImage(graphics, 0, 0, 17, 12,
// GameConstant.TRANS_ROT90, iPosX >> 8, iPosY >> 8,
// GameConstant.TOPLEFT);
bulletImage.drawRegionImage(graphics, 0, 0, 17, 12,
Sprite.TRANS_ROT90, iPosX >> 8, iPosY >> 8,
GameConstant.TOPLEFT);
// setIWidth(13 << 8);
// setIHeight(13 << 8);
}
} else if (xSpeed < 0) {
if (tan > -618 && tan <= -106) {
// 子弹指向135度方向
// bulletImage.drawImage(graphics, 0, 0, 17, 12,
// GameConstant.TRANS_ROT270, iPosX >> 8, iPosY >> 8,
// GameConstant.TOPLEFT);
bulletImage.drawRegionImage(graphics, 0, 0, 17, 12,
Sprite.TRANS_ROT270, iPosX >> 8, iPosY >> 8,
GameConstant.TOPLEFT);
// setIWidth(13 << 8);
// setIHeight(13 << 8);
} else if (tan > -106 && tan <= 106) {
// 子弹指向180度方向
// bulletImage.drawImage(graphics, 0, 12, 17, 6,
// GameConstant.TRANS_ROT180, iPosX >> 8, iPosY >> 8,
// GameConstant.TOPLEFT);
bulletImage.drawRegionImage(graphics, 0, 12, 17, 6,
Sprite.TRANS_ROT180, iPosX >> 8, iPosY >> 8,
GameConstant.TOPLEFT);
// setIWidth(17 << 8);
// setIHeight(3 << 8);
} else if (tan > 106 && tan <= 618) {
// 子弹指向225度方向
// bulletImage.drawImage(graphics, 0, 0, 17, 12,
// GameConstant.TRANS_ROT180, iPosX >> 8, iPosY >> 8,
// GameConstant.TOPLEFT);
bulletImage.drawRegionImage(graphics, 0, 0, 17, 12,
Sprite.TRANS_ROT180, iPosX >> 8, iPosY >> 8,
GameConstant.TOPLEFT);
// setIWidth(13 << 8);
// setIHeight(13 << 8);
}
}else if(xSpeed ==0){
if(ySpeed > 0){
// 子弹指向90度方向
// bulletImage.drawImage(graphics, 0, 12, 17, 6,
// GameConstant.TRANS_ROT270, iPosX >> 8, iPosY >> 8,
// GameConstant.TOPLEFT);
bulletImage.drawRegionImage(graphics, 0, 12, 17, 6,
Sprite.TRANS_ROT270, iPosX >> 8, iPosY >> 8,
GameConstant.TOPLEFT);
// setIWidth(3 << 8);
// setIHeight(17 << 8);
}else if(ySpeed < 0){
// 子弹指向270度方向
// bulletImage.drawImage(graphics, 0, 12, 17, 6,
// GameConstant.TRANS_ROT90, iPosX >> 8, iPosY >> 8,
// GameConstant.TOPLEFT);
bulletImage.drawRegionImage(graphics, 0, 12, 17, 6,
Sprite.TRANS_ROT90, iPosX >> 8, iPosY >> 8,
GameConstant.TOPLEFT);
// setIWidth(3 << 8);
// setIHeight(17 << 8);
}
}
}
public void drawImage(Graphics graphics) {
bulletImage.drawImage(graphics, iPosX >> 8, iPosY >> 8,
GameConstant.TOPLEFT);
}
public void drawRegionImage(Graphics g, int offx, int offy, int width,
int height, int transform, int anchor) {
bulletImage.drawRegionImage(g, offx, offy, width, height, transform,
iPosX >> 8, iPosY >> 8, anchor);
}
//得到运动时间
public int getMoveTimes() {
return moveTimes;
}
//设置运动时间
public void setMoveTimes(int trackTimes) {
this.moveTimes = trackTimes;
}
public int getXSpeed() {
return xSpeed;
}
public int getYSpeed() {
return ySpeed;
}
public void setXSpeed(int speed) {
xSpeed = speed;
}
public void setYSpeed(int speed) {
ySpeed = speed;
}
public byte getDamage() {
return damage;
}
public void setDamage(byte damage) {
this.damage = damage;
}
private int moveTimes; //运动时间
private int fumeInterval; //导弹烟雾间隔
private int xSpeed = 0; //x轴移动的速度
private int ySpeed = 0; //y轴移动的速度
private byte damage; //伤害值
private CImage bulletImage;
public int getFumeInterval() {
return fumeInterval;
}
public void setFumeInterval(int fumeInterval) {
this.fumeInterval = fumeInterval;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -