day10 1.英雄机和敌人的碰撞 1) 借用FlyingObject中的hit()碰撞行为 借用FlyingObject中的goDead()方法 在Hero中设计subtractLife()减命、clearDoubleFire()清空火力值4 /** 成员方法:减命 */ public void subtractLife() { life--; //命数减1 } /** 成员方法:清空火力值 */ public void clearDoubleFire() { doubleFire = 0; //火力值归0 } 2)因为英雄机与敌人碰撞为定时发生的,所以在run()中调用heroBangAction()方法: 在heroBangAction()中: 遍历所以敌人,获取每个敌人,判断是否与英雄机撞上了 若撞上了:敌人去死、英雄机减命 、英雄机清空火力值 /** 成员方法:英雄机与敌人的碰撞 */ public void heroBangAction() { //每10个毫秒走一次 for (int i = 0; i < enemies.length; i++) { FlyingObject f =enemies[i]; //得到每一个敌人 if (hero.isLife() && f.isLife() && f.hit(hero)) { //若撞上了 f.goDead(); //敌人去死 hero.subtractLife(); //英雄机减命 hero.clearDoubleFire(); //英雄机清火力 } } } 2.检测游戏结束 1)借用hero的getLIfe()获取命 2)因为检测游戏结束为定时发生的,所以在run()中调用checkGameOverAction()方法: 在checkGameOverAction()中: 判断英雄机的命数 <= 0,若为true则 /** 成员方法:检测游戏结束 */ public void checkGameOverAction() {//每10个毫秒走一次 if(hero.getLife() <= 0) { //游戏结束了 state = GAME_OVER; } } 3.画状态 1)设计了四个状态常量,当前状态state变量 设计了三个静态图片,在static块中初始化 2)在paint()中设计在不同状态下画不同的图片 3)将一堆action()设计为仅在运行状态下在执行 将英雄机随着鼠标动设计为仅在运行状态下在执行 4)重写mouseClicked()鼠标点击事件 重写mouseClicked()鼠标点击事件 重写mouseClicked()鼠标点击事件 /** 常量:游戏的开始、运行、暂停、结束)*/ public static final int START = 0; public static final int RUNNING = 1; public static final int PAUSE = 2; public static final int GAME_OVER = 3; /** 成员变量:当前状态(默认为启动状态) */ private int state = START; /** 成员变量:三张图(启动、暂停、结束) */ private static BufferedImage start; private static BufferedImage pause; private static BufferedImage gameover; static { //初始化静态图片 start = FlyingObject.loadImage("start.png"); pause = FlyingObject.loadImage("pause.png"); gameover = FlyingObject.loadImage("gameover.png"); } switch(state) { //在不同状态下画不同的图 case START: //启动 g.drawImage(start, 0, 0, null); break; case PAUSE: //暂停 g.drawImage(pause, 0, 0, null); break; case GAME_OVER: //结束 g.drawImage(gameover, 0, 0, null); break; } /** 重写mouseMoved()鼠标移动 */ public void mouseMoved(MouseEvent e) { if(state == RUNNING) { int x = e.getX(); //获取鼠标的x坐标 int y = e.getY(); //获取鼠标的y坐标 hero.moveTo(x, y); //英雄机随着鼠标移动 } } /** 重写mouseClicked()鼠标点击 */ public void mouseClicked(MouseEvent e) { switch (state) { //根据当前状态做不同操作 case START: //启动状态 state = RUNNING; //变为运行状态 break; case GAME_OVER: //结束状态 score = 0; sky = new Sky(); hero = new Hero(); enemies = new FlyingObject[0]; bullets = new Bullet[0]; state = START; //变为启动状态 break; } } /** 重写mouseExited()鼠标移出 */ public void mouseExited(MouseEvent e) { if(state == RUNNING) { //运行状态 state = PAUSE; //修改为暂停状态 } } /** 重写mouseEntered()鼠标移入 */ public void mouseEntered(MouseEvent e) { if(state == PAUSE) { //暂停状态 state = RUNNING; //修改为运行状态 } }
Java学习二(飞机大战项目)day10
Posted lj-6112
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java学习二(飞机大战项目)day10相关的知识,希望对你有一定的参考价值。
以上是关于Java学习二(飞机大战项目)day10的主要内容,如果未能解决你的问题,请参考以下文章