八、血条的制作和boss敌人的产生(雷霆战机)
2017-11-24 13:19
459 查看
GitHub地址:https://github.com/WingedCat/AirWar
血条成品:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/02/9b5a01e21b86a404de2166d6575dbf21)
获取血条图片:
为使血条在最上面而不会被其他物体挡住,将下面的代码写在paint()方法最下面:
我设定一个关卡的时间至少为90秒,当超过就是90秒后,并且没有敌机时我就刷出一架boss敌机:
在GameFrame中设定起始时间start:
在检测敌机的线程中这样处理:
boss级别的敌机不会向下走,只能左右移动:
血条成品:
获取血条图片:
//获取血条 Image bloodImg = GameImage.getImage("resources/blood.png");
为使血条在最上面而不会被其他物体挡住,将下面的代码写在paint()方法最下面:
g.setColor(Color.RED); g.fillRect(48, 55, (int)Math.round(214*(myplane.getLife()*0.01)), 10); g.drawImage(bloodImg, 0, 30, null); g.setColor(Color.white);
我设定一个关卡的时间至少为90秒,当超过就是90秒后,并且没有敌机时我就刷出一架boss敌机:
在GameFrame中设定起始时间start:
public long start = System.currentTimeMillis();
在检测敌机的线程中这样处理:
import java.util.Random; import cn.xpu.hcp.game.GameFrame; import cn.xpu.hcp.tools.GameImage; import cn.xpu.hcp.tools.PlaySound; public class CreateEnemyThread extends Thread{ private GameFrame gf; private static Random r = new Random(); public CreateEnemyThread(GameFrame gf){ this.gf = gf; System.out.println("check..."); } @Override public void run() { while(true){ if((System.currentTimeMillis()-gf.start)/1000>=90){//一分半后,待打完所有普通敌人,boss开始出现 if(gf.es.size()==0){ new PlaySound("bosscoming.mp3", false); gf.pbg.stop(); gf.pbg = new PlaySound("bossing.mp3", true); gf.pbg.start(); Plane boss = new Plane(r.nextInt(500),50,5,false,true,gf);//boss敌机 boss.setLife(1000);//boss生命值为1000 gf.es.add(boss); } }else{ if(gf.es.size()<6){//使敌机数量保持在6架 Plane ePlane = new Plane(r.nextInt(500),-r.nextInt(500),5,false,false,gf);//敌机 ePlane.setBoss(false); gf.es.add(ePlane); } } try { Thread.sleep(40); } catch (InterruptedException e) { e.printStackTrace(); }//使CPU歇会 } } }
boss级别的敌机不会向下走,只能左右移动:
private static Random r = new Random(); private int step=r.nextInt(50);//随机走多少步 ,用于Boss敌机
if(isBoss){//boss敌机只会左右移动,所有不能左右出界 Direction[] dirs = Direction.values(); if(step == 0) { step = r.nextInt(50) + 3; int rn = r.nextInt(2); dir = dirs[rn];//获取随机方向 } step --; if(r.nextInt(40) > 38) this.fire();//产生的随机数大于38就开火 if(x < 0) x = 0; if(x + ensureImg.getWidth(null) > Constant.GAME_WIDTH) x = Constant.GAME_WIDTH - ensureImg.getWidth(null); if(y + ensureImg.getHeight(null) > Constant.GAME_HEIGHT) y = Constant.GAME_HEIGHT - ensureImg.getHeight(null); }
相关文章推荐
- 敌人头顶血条的制作心得
- [Unity插件]Behavior Designer:制作敌人AI
- (译)加入敌人和战斗:如果使用cocos2d制作基于tiled地图的游戏:第三部分
- 血条的制作
- ugui制作弧形血条
- Unity3D 人形血条制作小知识
- 【转】敌人跟随效果制作
- 最新 unity 血条的另类制作-伤害减血加血自动回血
- UGUI 之 制作敌人不在摄像机视口的UI方向提示(或检测物体在不在摄像机渲染范围内)(四)
- unity3D制作血条跟随的研究
- Unity3D血条的制作
- unity3d学习笔记(十九)--ngui制作人物头顶的头像和血条
- 制作android二维码时产生的错误总结
- 【Unity3D】判断是否鼠标点击物体与血条制作
- Creep敌人,也可能是BOSS的性格特征吧~
- 用Fragment制作的Tab页面产生的UI重叠问题
- unity3d学习笔记(九)--NGUI制作英雄和怪物的头像和血条
- Fuse角色产生软件的实作流程 - 一款实用的游戏角色制作工具
- C#基础-041 设计一个玩家类,一个敌人类, 玩家可以攻击敌人,敌人可以攻击玩家,攻击点合理设计,可以通过随机数产生,模拟战斗过程
- Unity3D 人形血条制作小知识