📄 enemy.java
字号:
this.visible = false;
temp = true;
}
}
break;
}
return temp;
}
if (spriteType == Hp16)
{ //医疗箱
switch (enemyState)
{
case STA_DEAD: //被击中
if (spriteY < gameworld.screenHeight - 14)
{
move(0, 14);
} else
{
spriteY = gameworld.screenHeight - 14;
if (spriteX <= -gameworld.offsetX + 10)
{
this.visible = false;
gameworld.player.addHP();
} else
{
move(-14, 0);
}
}
break;
}
return temp;
}
if (spriteType == 21 || spriteType == 22)
{
switch (enemyState)
{
case STA_DEAD: //被打中播放爆炸效果
frameSpace += System.currentTimeMillis() - lastTime;
if (frameSpace > 100)
{
frameSpace = 0;
currentFrame++;
}
if (currentFrame > 3)
{//爆炸后加生命值
if (spriteY < gameworld.screenHeight - 14)
{
move(0, 14);
} else
{
spriteY = gameworld.screenHeight - 14;
if (spriteX <= -gameworld.offsetX + 10)
{
this.visible = false;
gameworld.player.addHP();
} else
{
move(-14, 0);
}
}
}
break;
}
return temp;
}
if (spriteType == iteam23)
{ //其它宝物
switch (enemyState)
{
case STA_DEAD: //被击中
switch (itemType)
{
case 0: //空袭
if (spriteY < gameworld.screenHeight - 17)
{
move(0, 17);
} else
{
spriteY = gameworld.screenHeight - 17;
if (spriteX < -gameworld.offsetX + 90)
{
if (spriteX + 17 >= -gameworld.offsetX + 90)
{
move((spriteX + 17) - (gameworld.offsetX + 90),
0);
gameworld.player.addAir();
this.visible = false;
} else
{
move(17, 0);
}
} else
{
move(-17, 0);
}
}
break;
case 1: //增加子弹
case 2: //增加子弹
if (spriteY < gameworld.screenHeight - 17)
{
move(0, 17);
} else
{
spriteY = gameworld.screenHeight - 17;
if (spriteX < -gameworld.offsetX
+ gameworld.screenWidth - 50)
{
if (spriteX + 17 >= -gameworld.offsetX
+ gameworld.screenWidth - 50)
{
move((spriteX + 17)
- (gameworld.offsetX
+ gameworld.screenWidth - 50),
0);
gameworld.player.addBullet();
this.visible = false;
} else
{
move(17, 0);
}
} else
{
move(-17, 0);
}
}
break;
}
break;
}
return temp;
}
if (spriteType == ship28)
{ // 船
switch (enemyState)
{
case STA_GO_RIGHT: // 展开
frameSpace += System.currentTimeMillis() - lastTime;
if (frameSpace > 500)
{
currentFrame++;
frameSpace = 0;
if (currentFrame > totalFrame)
{
temp = true;
nextState = Enemy.STA_FIRE;
}
}
break;
case STA_DEAD: //爆炸
frameSpace += System.currentTimeMillis() - lastTime;
if (frameSpace > 150)
{
currentFrame++;
frameSpace = 0;
if (currentFrame > totalFrame)
{
temp = true;
}
}
break;
case STA_FIRE: //攻击
frameSpace += System.currentTimeMillis() - lastTime;
if (frameSpace > 1000)
{
frameSpace = 0;
temp = true;
nextState = Enemy.STA_HIDEING;
action();
} else
{
isFire = !isFire;
}
break;
case STA_HIDEING: //隐藏
frameSpace += System.currentTimeMillis() - lastTime;
if (frameSpace > 500)
{
currentFrame--;
frameSpace = 0;
if (currentFrame <= totalFrame)
{
temp = true;
nextState = Enemy.STA_SPUER;
}
}
break;
}
}
return temp;
}
//改变精灵状态
final void changeState(int st)
{
enemyState = st;
nextState = st;
//静止的士兵、随机出现的士兵、手雷兵、伞兵
if (this.spriteType == 1 || this.spriteType == soldier_small4
|| spriteType == soldier_big5 || spriteType == 7)
{
switch (st)
{
case STA_GO_RIGHT://向右运动状态
tempFrame = 0;//起始帧
tempTotalFrame = 2;//最大帧数
break;
case STA_DEAD://死亡状态
tempFrame = 0;
tempTotalFrame = 1;
break;
case STA_FIRE: //攻击
if (spriteType == soldier_small4)
{ //行走士兵
int t = gameworld.randomNum(3);
tempFrame = t;
tempTotalFrame = t;
} else if (spriteType == 1)
{ //静止士兵
tempFrame = 0;
tempTotalFrame = 1;
} else
{ //手雷兵
tempFrame = 0;
tempTotalFrame = 2;
}
break;
case STA_GO_LEFT: //向左运动
tempFrame = 0;//播放 0-2 桢
tempTotalFrame = 2;
break;
case STA_REST: //静止状态;
tempFrame = 0;
tempTotalFrame = 1;
break;
}
isChangeState = true;
return;
}
if (this.spriteType == tank2)
{//坦克
switch (st)
{
case 0: // 向右运动状态
tempFrame = 0; // 起始帧
tempTotalFrame = 1; // 最大帧数
break;
case STA_DEAD: // 死亡状态
tempFrame = 2;
tempTotalFrame = 4;
break;
case 2: // 攻击
tempFrame = 0;
tempTotalFrame = 1;
break;
case 4: // 静止状态;
tempFrame = 0;
tempTotalFrame = 1;
break;
case 5: // 掉转炮头
tempFrame = 0;
tempTotalFrame = 1;
break;
case 9: // 攻击完成后播放炮火动画
tempFrame = 0;
tempTotalFrame = 1;
break;
}
isChangeState = true;
return;
}
if (spriteType == plane6)
{ //飞机
switch (enemyState)
{
case STA_DEAD: //爆炸
tempFrame = 0;
tempTotalFrame = 2;
break;
case STA_GO_RIGHT: //飞行
default:
tempFrame = 0;
tempTotalFrame = 2;
break;
}
isChangeState = true;
return;
}
if (spriteType == Hp9)
{ //油桶
tempFrame = 0;
tempTotalFrame = 0;
return;
}
if (spriteType == smallstone10)
{ //大石头
tempFrame = 0;
tempTotalFrame = 0;
return;
}
if (spriteType == bigstone11)
{ //小石头
tempFrame = 1;
tempTotalFrame = 1;
return;
}
if (spriteType == casern12)
{ //碉堡
switch (enemyState)
{
case STA_FIRE: //攻击
case STA_REST: //静止
tempFrame = 0;
tempTotalFrame = 0;
break;
}
isChangeState = true;
return;
}
if (spriteType == supersoj13)
{ //特种兵
switch (enemyState)
{
case STA_GO_RIGHT: //向右移动
tempFrame = 0;
tempTotalFrame = 2;
break;
case STA_DEAD: //死亡
tempFrame = 0;
tempTotalFrame = 1;
break;
case STA_FIRE: //攻击
tempFrame = 3;
tempTotalFrame = 3;
break;
case STA_GO_LEFT: //向左移动
tempFrame = 0;
tempTotalFrame = 2;
break;
case STA_ROLL_RIGHT: //向右翻滚
tempFrame = 0;
tempTotalFrame = 4;
break;
case STA_ROLL_LEFT: //向左翻滚
tempFrame = 0;
tempTotalFrame = 4;
break;
}
isChangeState = true;
return;
}
if (spriteType == bus14)
{ //汽车
switch (enemyState)
{
case STA_DEAD: //爆炸
tempFrame = 2;
tempTotalFrame = 4;
break;
default: //静止
tempFrame = 0;
tempTotalFrame = 0;
break;
}
isChangeState = true;
return;
}
if (spriteType == bomb15)
{//敌人投掷的手雷
switch (st)
{
case STA_GO_RIGHT://手雷被扔出
tempFrame = 0;
tempTotalFrame = 3;
break;
case STA_DEAD://手雷爆炸
tempFrame = 0;
tempTotalFrame = 2;
break;
}
isChangeState = true;
return;
}
if (spriteType == Hp16)
{ //医疗箱
tempFrame = 0;
tempTotalFrame = 0;
isChangeState = true;
return;
}
if (spriteType == casern19)
{ //碉堡
tempFrame = 0;
tempTotalFrame = 0;
isChangeState = true;
return;
}
if (spriteType == casern20)
{ //碉堡
tempFrame = 1;
tempTotalFrame = 1;
isChangeState = true;
return;
}
if (spriteType == 21)
{ //油桶
tempFrame = 0;
tempTotalFrame = 0;
isChangeState = true;
return;
}
if (spriteType == 22)
{ //油桶
tempFrame = 0;
tempTotalFrame = 0;
isChangeState = true;
return;
}
if (spriteType == 28)
{ //船
switch (enemyState)
{
case STA_GO_RIGHT: //展开
tempFrame = 0;
tempTotalFrame = 2;
break;
case STA_DEAD: //爆炸
tempFrame = 3;
tempTotalFrame = 3;
break;
case STA_SPUER:
case STA_HIDEING:
tempFrame = 0;
tempTotalFrame = 1;
}
isChangeState = true;
return;
}
}
//敌人的逻辑处理
final void logic()
{
if (lastTime == 0)
{
lastTime = System.currentTimeMillis();
}
//敌人超出屏幕后消失
if ((this.spriteX + this.width) / 16 < gameworld.column)
{
this.visible = false;
if (spriteType == rest1 || spriteType == tank2
|| spriteType == tower3 || spriteType == soldier_small4
|| spriteType == soldier_big5 || spriteType == plane6
|| spriteType == supersoj13 || spriteType == bus14
|| spriteType == ship28 || spriteType == iteam23)
{
gameworld.enemyCount--; //敌人总数减1
}
return;
}
//根据敌人的类型设定触发动作间隔
switch (spriteType)
{
case rest1: //静止不动的士兵
if (!isTrigger)
{
trigger(randomTime * 1000); //触发动作
} else
{
nextState = STA_FIRE; //攻击
isFire = !isFire;
}
break;
case tank2: //坦克
if (!isTrigger)
{
trigger(randomTime); //进入屏幕4秒后触发动作
break;
}
if (isTrigger && isFisrt)
{
tempState = enemyState; //保存原来的状态以便开火之后恢复
nextState = STA_GO_RIGHT; //移动
isFisrt = false;
randomTime = gameworld.randomNum(4);
moveTime = randomTime * 1000;
if (moveTime == 0)
{
moveTime = 1000;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -