📄 enemy.java
字号:
break;
case ship28: //船
spriteY = 40;
setHP(10);
width = 95;
height = 63;
this.collisionW = 20;
this.collisionH = 20;
collisionX = spriteX + 30;
collisionY = spriteY + 25;
execution = 5;
randomTime = 4;
enemyState = Enemy.STA_SPUER;
nextState = enemyState;
changeState(enemyState);
break;
}
spriteY = spriteY - gameworld.positionY;
collisionY = collisionY - gameworld.positionY;
}
/**
* 根据精灵状态播放动画帧
*
* @return 所有动画播放完后返回true 否则返回false
*/
final boolean playFrame()
{
boolean temp = false;
if (isChangeState)
{ //状态已经改变
this.currentFrame = tempFrame; //设置起始帧
this.totalFrame = tempTotalFrame; //设置结束帧
isChangeState = false;
}
if (this.spriteType == 1)
{ //静止的步兵动画帧播放
switch (enemyState)
{
case STA_DEAD: //死亡
if (spriteType == 1)
{
currentFrame++;
if (currentFrame > totalFrame)
{
temp = true;
}
}
break;
case STA_FIRE://动作触发后每隔一秒射击一次
frameSpace += System.currentTimeMillis() - lastTime;
movedTimes += System.currentTimeMillis() - lastTime;
if (frameSpace >= 50)
{
gameworld.isKillHP = true;
frameSpace = 0;
if (movedTimes >= 1000)
{
movedTimes = 0;
action();
}
}
//移动的敌人如果超出了边界自动消失
if (this.spriteX >= gameworld.screenWidth - gameworld.offsetX
|| this.spriteX <= Math.abs(gameworld.offsetX) - this.width)
{
this.visible = false;
gameworld.enemyCount--;
}
break;
case STA_REST://静止
temp = true;
//移动的敌人如果超出了边界自动消失
if (this.spriteX >= gameworld.screenWidth - gameworld.offsetX
|| this.spriteX <= Math.abs(gameworld.offsetX) - this.width)
{
this.visible = false;
gameworld.enemyCount--;
}
break;
}
return temp;
}
if (this.spriteType == tank2)
{//坦克
switch (enemyState)
{
case STA_GO_RIGHT: //向右移动
frameSpace += System.currentTimeMillis() - lastTime;
movedTimes += System.currentTimeMillis() - lastTime;
if (frameSpace >= 2500)
{
frameSpace = 0;
if (currentFrame >= totalFrame && movedTimes >= moveTime)
{
temp = true;
nextState = STA_TURN_HEAD; //掉转炮头
} else
{
if (currentFrame >= totalFrame)
{
currentFrame = tempFrame;
}
currentFrame += 1;
move(5, 0);
temp = false;
}
}
break;
case STA_DEAD://死亡
frameSpace += System.currentTimeMillis() - lastTime;
if (frameSpace >= 150)
{
frameSpace = 0;
currentFrame++;
if (currentFrame > totalFrame)
{
temp = true;
}
}
break;
case STA_FIRE://攻击
frameSpace += System.currentTimeMillis() - lastTime;
this.movedTimes += System.currentTimeMillis() - lastTime;
if (movedTimes >= 1400)
{//坦克的攻击频率是2秒/次
if (frameSpace >= 150)
{//子弹动画有3帧,因此每帧150
frameSpace = 0;
currentFrame++;
if (currentFrame > totalFrame)
{
action();
movedTimes = 0;
currentFrame = tempFrame;
nextState = Enemy.STA_FIRE_END;
temp = true;
gameworld.isKillHPBom = true;
}
}
}
break;
case STA_REST://静止
temp = true;
break;
case STA_TURN_HEAD://掉转炮头
frameSpace += System.currentTimeMillis() - lastTime;
if (frameSpace >= 1000)
{
frameSpace = 0;
if (currentFrame >= totalFrame)
{
temp = true;
} else
{
currentFrame += 1;
temp = false;
}
}
break;
case STA_FIRE_END://炮弹爆破
frameSpace += System.currentTimeMillis() - lastTime;
if (frameSpace >= 200)
{
frameSpace = 0;
currentFrame++;
if (currentFrame > totalFrame)
{
temp = true;
nextState = Enemy.STA_FIRE;
}
}
break;
}
return temp;
}
if (this.spriteType == soldier_small4 || spriteType == soldier_big5)
{//随机出现的敌人
switch (enemyState)
{
case STA_GO_RIGHT:
frameSpace += System.currentTimeMillis() - lastTime;
if (frameSpace >= 100)
{//6帧/秒
frameSpace = 0;
currentFrame++;
move(4, 0);
if (currentFrame > totalFrame)
{
currentFrame = tempFrame;
temp = true;
}
}
break;
case STA_DEAD://死亡
frameSpace += System.currentTimeMillis() - lastTime;
if (frameSpace >= 1000)
{
frameSpace = 0;
temp = true;
int tempNum = gameworld.randomNum(8);
if (tempNum == 7)
{
this.init(this.spriteX, 23);
}
}
break;
case STA_FIRE://攻击
frameSpace += System.currentTimeMillis() - lastTime;
if (spriteType == soldier_small4)
{//开枪
this.movedTimes += System.currentTimeMillis() - lastTime;
if (frameSpace >= 50)
{
gameworld.isKillHP = true;
frameSpace = 0;
if (movedTimes >= 1000)
{
action();
movedTimes = 0;
temp = true;
isTrigger = false;
nextState = tempState;//恢复原有的状态
} else
{
currentFrame = currentFrame + 1 > totalFrame ? tempFrame
: currentFrame + 1;
}
}
} else
{//扔雷
if (frameSpace > 200)
{
frameSpace = 0;
currentFrame++;
if (currentFrame > totalFrame)
{
temp = true;
nextState = tempState;//恢复原有的状态
for (int i = 0; i < gameworld.allEnemy.length; i++)
{
if (!gameworld.allEnemy[i].visible)
{
gameworld.allEnemy[i].init(spriteX, 15);
break;
}
}
}
}
}
break;
case STA_GO_LEFT: //向左运动
frameSpace += System.currentTimeMillis() - lastTime;
if (frameSpace >= 100)
{ //6帧/秒
frameSpace = 0;
currentFrame++;
move(-4, 0);
temp = false;
if (currentFrame > totalFrame)
{
temp = true;
currentFrame = tempFrame;
}
}
break;
}
return temp;
}
if (this.spriteType == plane6)
{ //飞机
frameSpace += System.currentTimeMillis() - lastTime;
switch (enemyState)
{
case STA_GO_RIGHT: //向右飞行
if (frameSpace >= 100)
{
frameSpace = 0;
currentFrame++;
if (spriteX + gameworld.offsetX < 50)
move(4, 0);
if (currentFrame > totalFrame)
{
temp = true;
currentFrame = tempFrame;
}
}
if (isFire == true)
gameworld.player.killHP(gameworld.randomNum(2));
break;
case STA_DEAD: //爆炸
if (frameSpace >= 150)
{
frameSpace = 0;
currentFrame++;
if (currentFrame > totalFrame)
{
temp = true;
}
}
break;
}
}
if (spriteType == Hp9)
{ //血瓶
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 == casern12)
{//碉堡
frameSpace += System.currentTimeMillis() - lastTime;
switch (enemyState)
{
case STA_FIRE: //攻击
if (frameSpace >= 1000)
{
frameSpace = 0;
temp = true;
action();
}
break;
case STA_REST: //静止
temp = true;
break;
case STA_DEAD: //
break;
}
}
if (spriteType == supersoj13)
{//特种兵
frameSpace += System.currentTimeMillis() - lastTime;
switch (enemyState)
{
case STA_GO_RIGHT: //向右移动
if (frameSpace >= 100)
{ //6帧/秒
frameSpace = 0;
currentFrame++;
move(6, 0);
if (currentFrame > totalFrame)
{
currentFrame = tempFrame;
temp = true;
}
}
break;
case STA_DEAD: //死亡
if (frameSpace >= 1000)
{
frameSpace = 0;
temp = true;
}
break;
case STA_FIRE: //攻击
if (frameSpace >= 1000)
{
frameSpace = 0;
temp = true;
action();
}
break;
case STA_GO_LEFT: //向左移动
if (frameSpace >= 100)
{ //6帧/秒
frameSpace = 0;
currentFrame++;
move(-6, 0);
if (currentFrame > totalFrame)
{
currentFrame = tempFrame;
temp = true;
}
}
break;
case STA_ROLL_RIGHT: //向右翻滚
if (frameSpace >= 100)
{ //6帧/秒
frameSpace = 0;
currentFrame++;
move(15, 0);
if (currentFrame > totalFrame)
{
currentFrame = 0;
temp = true;
nextState = Enemy.STA_FIRE;
}
}
break;
case STA_ROLL_LEFT: //向左翻滚
if (frameSpace >= 100)
{ //6帧/秒
frameSpace = 0;
currentFrame++;
move(-15, 0);
if (currentFrame > totalFrame)
{
currentFrame = 0;
temp = true;
nextState = Enemy.STA_FIRE;
}
}
break;
}
}
if (spriteType == bus14)
{//汽车
frameSpace += System.currentTimeMillis() - lastTime;
switch (enemyState)
{
case STA_DEAD://爆炸
if (frameSpace >= 150)
{
frameSpace = 0;
currentFrame++;
if (currentFrame > totalFrame)
{
temp = true;
}
}
break;
case STA_FIRE:// 子弹
isFire = !isFire;
if (isFire
&& spriteX + gameworld.offsetX > -120
&& spriteX + gameworld.offsetX < gameworld.screenWidth - 20)
{
// System.out.println(isFire);
action();
}
frameSpace = 0;
currentFrame++;
if (currentFrame > totalFrame)
{
temp = true;
nextState = Enemy.STA_REST;
changeState(Enemy.STA_REST);
}
break;
case STA_REST:
isFire = !isFire;
temp = true;
break;
}
return temp;
}
if (spriteType == bomb15)
{ //敌人的手雷
frameSpace += System.currentTimeMillis() - lastTime;
switch (enemyState)
{
case STA_GO_RIGHT: //手雷被扔出
if (frameSpace > 200)
{
frameSpace = 0;
currentFrame++;
spriteY += 10;
if (currentFrame > totalFrame)
{
action();
changeState(STA_DEAD);
}
}
break;
case STA_DEAD: //手雷爆炸
if (frameSpace > 300)
{
frameSpace = 0;
currentFrame++;
if (currentFrame > totalFrame)
{
gameworld.isKillHPBom = true;
gameworld.player.killHP(5);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -