需求描述
飞机被炮弹击中需要一个爆炸效果
技术实现
-
定义一个Exlode类表示爆炸的信息
-
存储了一系列的爆炸的图片
-
碰撞到的时候进行轮播
细节
-
爆炸需要坐标点
-
爆炸后执行循环播放爆炸图的逻辑
-
需要定义属性描述爆炸的坐标点
-
定义数组存储爆炸的图片以便爆炸的时候产生这个效果
-
不希望图片频繁加载,希望节省资源只加载一次
-
定义static变量,存储16个图片---依次画实现动画效果
-
创建静态初始化块,伴随变量的声明周期
-
实例:
package com.lucifer.game;
import java.awt.Graphics;
import java.awt.Image;
/**
* 爆炸类---爆炸效果图片存放位置
*/
public class Explode {
/*定义两个变量,这是爆炸的坐标位置*/
double x,y;
/*创建一个图片数组,循环播放这些图片,用static静态的关键字*/
static Image[] imgs = new Image[16];
/*static方法块*/
static {
for (int i = 0; i < 16; i++){
/*循环轮播---循环画出数组内的数据*/
imgs[i] = GameUtil.getImage("images/big" + (i+1) + ".gif");
imgs[i].getWidth(null);
}
}
/*
计数器控制到底画那个图片
*/
int count;
public void draw(Graphics g){
if (count <= 15){
g.drawImage(imgs[count],(int) x,(int) y,null); //画出图片的坐标
count++;
}
}
/*创建个构造器,方便调用*/
public Explode(double x, double y){
this.x = x;
this.y = y;
}
}
关键点:
-
定义Image[]来保存图片信息
-
使用static代码块,其目的是在类加载时就加载这些图片,图片从属于类,不需要每次创建爆炸对象都加载图片,保证允许效率
-
通过基础其count控制到底画那个图片---由于图片命名很规范,让程序依次读取即可知道
画出爆炸对象
步骤
-
创建爆炸类的对象
-
先声明对象
-
在 发生碰撞的时候在建立对象
-
/*声明爆炸类的对象,在发生碰撞的时候在实际建立对象*/
Explode boom;
if (peng){
// System.out.println("碰到了!!!");
p.live = false; //相碰死掉
if (boom == null){
/*创建爆炸对象*/
boom = new Explode(p.x,p.y); //传入飞机的坐标,飞机在哪里爆炸就传入那个坐标
/*
没有if判断的话飞机的矩形在和小球的矩形碰撞的时候
小球在飞机的矩形上方一直运动,一直建立对象,总是一个小图片,就看不到效果。
直到飞出飞机的矩形外才会停止建立对象
*/
}
/*画出爆炸效果图*/
boom.draw(g);
}