现在添加字段对象,子弹,敌机,玩家,都是属于modle包中的对象,所以我们新建一个类Bullet
1/定义子弹需要的一些常量,子弹图片的长宽,子弹的坐标。
然后使用Tooklit.getDefaultToolkit().getImage(“文件路径”);
获得子弹图片,新建一个Imageindex变量做为图片的下标,和之前一样,我们要让子弹有动画看起来是旋转的。

package modle;import java.awt.Image;
import java.awt.Toolkit;import view.MyPanel;public class Bullet {public MyPanel myPanel;//子弹的坐标x和ypublic int x,y;//子弹图片的长和宽public int height, width;public Bullet(MyPanel myPanel){this.myPanel = myPanel;}public int imageindex = 0;public Image[] images = new Image[] {Toolkit.getDefaultToolkit().getImage("images/bullet01.png"),Toolkit.getDefaultToolkit().getImage("images/bullet02.png"),Toolkit.getDefaultToolkit().getImage("images/bullet03.png"),Toolkit.getDefaultToolkit().getImage("images/bullet04.png"),Toolkit.getDefaultToolkit().getImage("images/bullet05.png"),Toolkit.getDefaultToolkit().getImage("images/bullet06.png"),};}

然后添加画子弹的方法

public void drawSelf(Graphics g){g.drawImage(images[imageindex], x, y, width, height, null);}
public void drawSelf(Graphics g){g.drawImage(images[imageindex], x, y, width, height, null);if(this.myPanel.time %  4 ==0){//每四毫米图片变化一次imageindex ++;if(imageindex == images.length){imageindex = 0;}//子弹移动y --;//超出屏幕移除子弹}}

接下来去MyPanel类中添加子弹
子弹有很多的,而且我们不知道数量,所以我们使用一个ArrayList来存储子弹

在MyPanel类中

public ArrayList<Bullet> bullets = new ArrayList<Bullet>();

然后在我们的子弹中添加移除子弹的方法,生成一个子弹,系统占用一部分内存,不删除最后导致程序异常。

package modle;import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;import view.MyPanel;public class Bullet {public MyPanel myPanel;//子弹的坐标x和ypublic int x,y;//子弹图片的长和宽public int height, width;public Bullet(MyPanel myPanel){this.myPanel = myPanel;}public int imageindex = 0;public Image[] images = new Image[] {Toolkit.getDefaultToolkit().getImage("images/bullet01.png"),Toolkit.getDefaultToolkit().getImage("images/bullet02.png"),Toolkit.getDefaultToolkit().getImage("images/bullet03.png"),Toolkit.getDefaultToolkit().getImage("images/bullet04.png"),Toolkit.getDefaultToolkit().getImage("images/bullet05.png"),Toolkit.getDefaultToolkit().getImage("images/bullet06.png"),};//绘制子弹public void drawSelf(Graphics g){g.drawImage(images[imageindex], x, y, width, height, null);if(this.myPanel.time %  4 ==0){//每四毫米图片变化一次imageindex ++;if(imageindex == images.length){imageindex = 0;}//子弹移动y --;//超出屏幕移除子弹if(y < 0){this.myPanel.bullets.remove(this);}}}}

现在子弹有了,我们要去MyPanel中绘制我们的子弹
重构成一个单独的方法

public void paintBullets(Graphics g){//创建子弹Bullet bullet = new Bullet(this);//把子弹的坐标绑定在玩家上bullet.x = this.player.x;bullet.y = this.player.y;this.bullets.add(bullet);//便利数组,绘制子弹for(int i =0; i<bullets.size();i++){this.bullets.get(i).drawSelf(g);}}}

这样就结束了吗? 不,我们运行会发现子弹是一条连续的细线,因为为绘制子弹一的方法一直会被调用,所以我们要使用time 来限制子弹的发射速度。

//绘制子弹public void paintBullets(Graphics g){if(time % 100 == 0){//创建子弹Bullet bullet = new Bullet(this);//把子弹的坐标绑定在玩家上bullet.x = this.player.x+this.player.width/2-4;bullet.y = this.player.y;this.bullets.add(bullet);}//便利数组,绘制子弹for(int i =0; i<bullets.size();i++){this.bullets.get(i).drawSelf(g);}}

飞机大战之-添加子弹相关推荐

  1. ES6飞机大战篇-添加子弹追踪功能

    既然是飞机大战 那必定少不了子弹追踪 那么添加子弹追踪功能的实现如下: // 原文链接:https://blog.csdn.net/erweimac/article/details/82256087 ...

  2. Python学习日记-第二十六天-飞机大战(发射子弹和碰撞检测)

    系列文章目录 1.发射子弹 2.碰撞检测 一.发射子弹 1.1   添加发射子弹事件 Pygame的定时器使用套路非常固定: 定义定时器常量--eventtid 在初始化方法中,调用set_timer ...

  3. python-pygame实现飞机大战-3-发射子弹以及击中敌机

    承接上两步: 1.python-pygame实现飞机大战-添加背景以及飞机运动 2.python-pygame实现飞机大战-2-添加敌机以及碰撞爆炸 在完成玩家飞机运动,生成敌机飞机以及两者碰撞爆炸后 ...

  4. 飞机大战之-添加背景

    之前我们已经生成了一个空白的窗口,接下来我们要在这个窗口上添加背景. 我们新建一个MyPanel的类用来单独设置面板. MyPanel是继承于JPanel的一个子类.导入所需的包. package v ...

  5. Python_从零开始学习_(52) 飞机大战_发射子弹

    1.  设计 英雄 和 子弹 类 英雄需求 游戏启动后,  英雄 出现在屏幕的 水平中间 位置,  距离 屏幕底部 120 像素 英雄 每隔 0.5 秒发射一次子弹,  每次 连发三枚子弹 英雄 默认 ...

  6. 27飞机大战_发射子弹

    1.  设计 英雄 和 子弹 类 英雄需求 游戏启动后,  英雄 出现在屏幕的 水平中间 位置,  距离 屏幕底部 120 像素 英雄 每隔 0.5 秒发射一次子弹,  每次 连发三枚子弹 英雄 默认 ...

  7. java 中飞机大战碰撞检测,飞机大战开发04子弹与敌机的碰撞检测

    先是敌机与玩家子弹的碰撞检测: 代码: GameLayer.h void GameLayer::update(float dt) { for (int i = 0 ;i < m_pEnermyV ...

  8. Unity飞机大战(发射子弹 让子弹向前飞)

    1.发射子弹: 2.让子弹向前飞:

  9. Pygame飞机大战(四)——创建己方飞机的类,并添加子弹吧

    我们接下来要基于pygame.sprite.Sprite创建自己的类,首先必须是主角的,创建一个己方飞机的类,并且给飞机加上子弹哈! 首先我们还是先分析一下,己方飞机需要有哪些部分构成: 自身的图片加 ...

最新文章

  1. redis sentinel哨兵模式集群搭建教程
  2. C#微信公众平台开发—高级群发接口
  3. Pandas的DataFrame输出截断和省略问题
  4. xml mysql 模糊查询_mybatis+Spring mysql的模糊查询问题
  5. springboot2——MyBatis入门
  6. 想要摆脱手工报表困境?1个工具+5个场景解决80%工作难题
  7. linux 分段路由怎么添加,一种IPv6实现分段路由的方法及装置与流程
  8. Linux下JAVA线程占用CPU高的分析方法
  9. 椭圆形画画简单图案_十招创意拯救不会画画的你
  10. 记录SCI-hub使用方法
  11. 查找与清除线程插入式木马
  12. 导致UIButton半透明的原因
  13. 那人立在侧边 水浒传
  14. 2022网鼎杯白虎组misc830题解
  15. 点阵、基元和晶体结构之间的关系
  16. [转载]以xilinx为例的低功耗设计
  17. 酷狗计算机自动续费,怎么取消酷狗自动续费-APP自动续费关不了?可在微信支付宝这样操作!...
  18. vs2019+opencv环境配置
  19. 解决canvas导出图片模糊问题
  20. 高鸿业西方经济学微观部分第7版笔记

热门文章

  1. SCS-CN模型模拟地表径流(一)
  2. 有了art-template,如有神助
  3. 《小岛经济学》嘟书分享第五期
  4. HTML的段落标记 标记P,HTML的段落标记中,标注文本以原样显示的是标记 P
  5. Linux生态之深度学习环境
  6. 进销存设计与分析_盘点单(9)
  7. 如何使用api调用数据?
  8. 每日10行代码67:openpyxl指定工作表(sheet)的5种方法
  9. 王刚日记:为什么不赚钱的10大原因
  10. 关于 xhr.js?b50d:31 Uncaught (in promise) DOMException: Failed to execute ‘open‘ on ‘XMLHttpRequest‘: