JAVA全系列 教程
3762个小节阅读:7095.2k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
飞机被炮弹击中后,需要出现一个爆炸效果,让我们的画面更刺激。 爆炸效果的实现在游戏开发中也很常见。
我们这里准备了一系列爆炸图片:
我们定义Exlode类来表示爆炸的信息,爆炸类和普通类不一样的地方在于他实际上存储了一系列爆炸的图片,然后,进行轮播。最后,我们看到的就是一组酷炫的效果。
从爆炸开始的一个小火球到大火球,再到消失时的小火球。爆炸对象只需轮流加载这些图片即可。
我们将这些图片拷贝到项目下面,新建:images/explode
文件夹,并将16张图片拷贝到文件夹下面。
【示例13-23】爆炸类Explode
xxxxxxxxxx
package com.bjsxt.plane;
import java.awt.Graphics;
import java.awt.Image;
/*
* 爆炸类
*/
public class Explode {
double x,y;
static Image[ ] imgs = new Image[16];
static {
for(int i=0;i<16;i++){
imgs[i] = GameUtil.getImage("https://www.itbaizhan.com/wiki/images/explode/e"+(i+1)+".gif");
imgs[i].getWidth(null);
}
}
int count;
boolean live = true;
public void draw(Graphics g){
if(!live){
return;
}
if(count<=15){
g.drawImage(imgs[count], (int)x, (int)y, null);
count++;
}else{
live = false;
}
}
public Explode(double x,double y){
this.x = x;
this.y = y;
}
}
我们定义了Image[ ]
来保存图片信息,并且使用了static
代码块,也就是在类加载时就加载这些图片,并且从属于类,不需要每次创建爆炸对象都加载图片,保证了运行的效率。
通过计数器count
来控制到底画哪个图片,由于我们图片命名非常规范,是按照顺序从1-16,这样程序依次读取这些图片对象即可。
如果要显示爆炸对象,我们仍然需要在主窗口中定义爆炸对象,并且在飞机和炮弹碰撞时,在飞机坐标处创建爆炸对象,显示爆炸效果。
【示例13-24】MyGameFrame:增加爆炸效果
xxxxxxxxxx
public class MyGameFrame extends Frame {
Image bgImg = GameUtil.getImage("https://www.itbaizhan.com/wiki/images/bg.jpg");
Image planeImg = GameUtil.getImage("https://www.itbaizhan.com/wiki/images/plane.png");
Plane plane = new Plane(planeImg,300,300,3);
ArrayList<Shell> shellList = new ArrayList<Shell>();
Explode bao;//创建爆炸对象
//paint方法作用是:画出整个窗口及内部内容。被系统自动调用。
@Override
public void paint(Graphics g) {
g.drawImage(bgImg, 0, 0, null);
plane.drawMySelf(g); //画出飞机本身
//画出容器中所有的子弹
for(int i=0;i<shellList.size();i++){
Shell b = shellList.get(i);
b.draw(g);
//飞机和所有炮弹对象进行矩形检测
boolean peng = b.getRect().intersects(plane.getRect());
if(peng){
plane.live = false; //飞机死掉,画面不显示
if(bao==null){
bao = new Explode(plane.x,plane.y);
}
bao.draw(g);
}
}
}
//其余代码和上一个版本一致,限于篇幅,不再展示
}
程序执行结果,当飞机和炮弹碰撞时发生爆炸,如图13-16所示: