📄 npcs.java
字号:
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Graphics;
import java.io.IOException;
public class Npcs extends Actor {
private long delayMS, burnTime;
private int oldX, oldY, addY;
private int i, iState;
private int barFill, energyX;
private long time1;
private Image image1, image2, image3;
private SpriteClip spriteClip;
public Npcs(PigWorld pWorld) {
super(pWorld);
try {
image1 = Image.createImage("/images/npc.png");
image2 = Image.createImage("/images/boss.png");
image3 = Image.createImage("/images/daoju.png");
} catch (IOException e) {
e.printStackTrace();
}
spriteClip = new SpriteClip();
}
public void init(int type, int state, int startX, int startY,
int director, int speedX, int speedY) {
switch (type) {
case Actor.NPC:
spriteClip.init(image1, 16);
spriteClip.setArray(0, 23, 35, 117, 0, 2, 0); //等待状态
spriteClip.setArray(1, 23, 35, 117, 36, 2, 0);
spriteClip.setArray(2, 28, 36, 99, 210, 2, 0);
spriteClip.setArray(3, 27, 20, 102, 71, 2, 0);
spriteClip.setArray(4, 27, 20, 102, 91, 2, 0);
spriteClip.setArray(5, 33, 58, 0, 83, 2, 0); //着火状态
spriteClip.setArray(6, 33, 58, 0, 141, 2, 0);
spriteClip.setArray(7, 33, 60, 0, 200, 2, 0);
spriteClip.setArray(8, 27, 28, 101, 112, 2, 0);
spriteClip.setArray(9, 27, 28, 101, 140, 2, 0);
spriteClip.setArray(10, 23, 36, 110, 170, 0, 0); //捆绑状态
spriteClip.setArray(11, 23, 36, 133, 170, 0, 0);
spriteClip.setArray(12, 23, 30, 156, 180, 0, 0);
spriteClip.setArray(13, 39, 75, 39, 0, 0, 0); //降落伞状态
spriteClip.setArray(14, 39, 83, 0, 0, 0, 0);
spriteClip.setArray(15, 39, 55, 78, 0, 0, 0);
burnTime = System.currentTimeMillis();
break;
case Actor.BOSS:
spriteClip.init(image2, 7);
spriteClip.setArray(0, 40, 40, 0, 120, 3, 0); // boss_UP
spriteClip.setArray(1, 40, 40, 0, 40, 3, 0); // boss_DOWN
spriteClip.setArray(2, 40, 40, 0, 0, 3, 0); // boss_LEFT
spriteClip.setArray(3, 40, 40, 0, 80, 3, 0); // boss_RIGHT
spriteClip.setArray(4, 40, 40, 161, 0, 1, 0); // boss_gongji_huo
spriteClip.setArray(5, 40, 40, 161, 44, 1, 0); // boss_gongji_yan
spriteClip.setArray(6, 40, 40, 161, 94, 1, 0); // boss_gongji_jiguang
energyMax = 1000;
energy = energyMax;
barFill = 50;
energyX = energyMax / barFill;
break;
case daoju:
spriteClip.init(image3, 10);
spriteClip.setArray(0, 18, 20, 0, 0, 0, 0); // daoju_bao
spriteClip.setArray(1, 20, 20, 18, 0, 0, 0); // daoju_smallyao
spriteClip.setArray(2, 20, 20, 38, 0, 0, 0); //daoju_middleyao
spriteClip.setArray(3, 20, 20, 58, 0, 0, 0); //daoju_bigyao
spriteClip.setArray(4, 20, 20, 78, 0, 0, 0); // daoju_mianju
spriteClip.setArray(5, 20, 20, 98, 0, 0, 0); // daoju_lengjing
spriteClip.setArray(6, 20, 20, 138, 0, 0, 0); // daoju_key
spriteClip.setArray(7, 20, 20, 158, 0, 0, 0); // daoju_miehuo
spriteClip.setArray(8, 20, 20, 178, 0, 0, 0); //daoju_qingxin
spriteClip.setArray(9, 20, 20, 118, 0, 0, 0);
time1 = System.currentTimeMillis();
break;
}
spriteClip.setState(state, 200);
setSize(spriteClip.w, spriteClip.h);
super.init(type, state, startX, startY, director, speedX, speedY);
}
public void cycle() {
super.cycle();
if (type == NPC) {
if (System.currentTimeMillis() - delayMS > 1000) {
delayMS = System.currentTimeMillis();
switch (state) {
case 0:
state = 1;
break;
case 1:
state = 0;
break;
case 3:
state = 4;
break;
case 4:
state = 3;
break;
case 5:
state = 6;
break;
case 6:
state = 5;
break;
case 8:
state = 9;
break;
case 9:
state = 8;
break;
}
spriteClip.state = state;
}
if (oldX != 0 && oldY != 0) {
addGoods(oldX, oldY, 0, 0);
oldX = 0;
oldY = 0;
}
if (state >= 10 && state <= 12) {
if (i > 10) {
switch (state) {
case 10:
state = 13;
break;
case 11:
state = 14;
break;
case 12:
state = 15;
break;
}
spriteClip.setState(state, 200);
setSize(spriteClip.w, spriteClip.h);
i = 0;
}
i++;
}
if (state >= 0 && state <= 4) {
if (System.currentTimeMillis() - burnTime > 12000) {
switch (state) {
case 0:
case 1:
state = 5;
break;
case 2:
state = 7;
break;
case 3:
case 4:
state = 8;
break;
}
spriteClip.setState(state, 200);
if (speedY == 0) {
speedY = 2;
}
}
}
}
if (type == BOSS) {
if (energy > 0) {
if (i < fireTime) {
isFire = false;
} else {
isFire = true;
}
if (isFire) {
if (iState == 0) {
iState = getRand(4, 6);
spriteClip.setState(iState, 200);
speedX = 0;
}
if (i == fireTime + 4) {
int startX = (imageW - 20) / 2;
switch (iState) {
case 4:
world.getBulletFromPool().init(Actor.BULLET, 1,
x + startX, y + imageH / 2,
Actor.DOWN, 0, 6);
break;
case 5:
world.getBulletFromPool().init(Actor.BULLET, 2,
x + startX, y + imageH / 2,
Actor.DOWN, 0, 6);
break;
case 6:
world.getBulletFromPool().init(Actor.BULLET, 3,
x + (imageW - 10) / 2,
y + imageH / 2,
Actor.DOWN, 0, 0);
break;
}
}
if (i > fireTime + 8) {
iState = 0;
i = 0;
speedX = 3;
}
} else {
resetState();
}
i++;
} else {
direction = Actor.UP;
resetState();
speedX = 0;
speedY = 5;
isFire = false;
}
}
if (type == daoju) {
if (state == 9) {
if (System.currentTimeMillis() - time1 > 800) {
release = true;
}
}
}
if (release) {
world.releaseNpc(this);
}
}
public void render(Graphics g, int offsetX, int offsetY) {
spriteClip.drawClip(g, x + offsetX, y + offsetY - addY);
if (type == Actor.BOSS) {
barFill = energy / energyX;
g.setColor(255, 0, 0);
g.setClip(x + offsetX - 5, y + offsetY - 5, 51, 3);
g.fillRect(x + offsetX - 5, y + offsetY - 5, barFill, 3);
}
}
public void onCollision(Actor a) {
if (a == null) {
return;
}
if (type == NPC) {
if (state >= 0 && state <= 4 && a.state == 9) {
if (pointInRect(a.x, a.y, x, y, imageW, imageH)) {
if (oldX == 0 && oldY == 0) {
oldX = x;
oldY = y + 5;
}
switch (state) {
case 0:
case 1:
state = 10;
break;
case 2:
state = 11;
break;
case 3:
case 4:
state = 12;
addY = 10;
break;
}
spriteClip.setState(state, 200);
if (speedY == 0) {
speedY = 2;
}
crash = false;
PigCanvas.getGameScreen().setGoodsBao( -1);
PigCanvas.getGameScreen().setPersonCount(1);
}
}
}
if (type == daoju) {
if (a.type == FLYPIG) {
if (state >= 0 && state <= 8) {
if (pointInRect(x + imageW / 2, y + imageH / 2, a.x,
a.y, a.imageW, a.imageH)) {
if (state == 0) {
PigCanvas.getGameScreen().setGoodsBao(1);
} else {
PigCanvas.getGameScreen().setGoods(state);
}
crash = false;
world.releaseNpc(this);
}
}
}
}
}
public void addGoods(int startX, int startY, int speedX, int speedY) {
int iRandGoods = getRand(1, 8);
world.getNpcFromPool().init(Actor.daoju, iRandGoods, startX, startY,
Actor.DOWN, speedX, speedY);
}
public void resetState() {
switch (direction) {
case UP:
state = 0;
break;
case DOWN:
state = 1;
break;
case LEFT:
state = 2;
break;
case RIGHT:
state = 3;
break;
}
spriteClip.state = state;
setSize(spriteClip.w, spriteClip.h);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -