package com.bjsxt.plane;
import java.awt.*;
/**
* 爆炸类
*/
public class Explode {
//位置
double x,y;
static Image[] imgs=new Image[16];
int count;
static {
for(int i=0;i<16;i++){
imgs[i]=GameUtil.getImage("images/explode/e"+(i+1)+".gif");
imgs[i].getWidth(null);
}
}
public void drawMySelf(Graphics g){
if(count<16){
g.drawImage((imgs[count]),(int)x,(int)y,null);
count ++;
}
}
public Explode(){
}
public Explode(double x,double y) {
this.x = x;
this.y = y;
}
}
package com.bjsxt.plane;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/**
* 游戏主窗口
*/
public class MyGameFrame extends Frame {
Image planeImg=GameUtil.getImage("images/plane.jpg");
Image bg=GameUtil.getImage("images/bg.png");
Plane p1=new Plane(planeImg,100,100,7);
Shell [] shells=new Shell[50];
Explode explode;//爆炸
@Override
public void paint(Graphics g){//g当做是一支画笔
g.drawImage(bg,0,0,500,500,null);
p1.drawMyself(g);
//画炮弹
for (int i=0;i< shells.length;i++){
shells[i].drawMyself(g);
//碰撞检测,将所有的炮弹和飞机进行检测,看有没有碰撞
boolean peng =shells[i].getRec().intersects(p1.getRec());
if(peng){
p1.live=false;
//处理爆炸效果
if(explode==null) {
explode = new Explode(p1.x, p1.y);
explode.drawMySelf(g);
}
}
}
}
//初始化窗口
public void launchFrame(){
this.setTitle("飞机大战-尚学堂");
setVisible(true);//窗口是否可见
setSize(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);//窗口大小
setLocation(400,400);//窗口打开的位置
//增加关闭窗口的动作
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);//正常退出程序
}
});
new PaintThread().start();//启动重画窗口的线程
this.addKeyListener(new KeyMonitor());//启动键盘监听
//初始化创建50个炮弹对象
for(int i=0;i<50;i++){
shells[i]=new Shell();
}
}
/**
* 定义了一个重画窗口的线程类
* 定义成内部类是为了方便直接使用窗口的相关方法
*/
class PaintThread extends Thread{
@Override
public void run(){
while(true){
repaint();//内部类可以直接使用外部类的成员
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//内部类,实现键盘的监听处理
class KeyMonitor extends KeyAdapter{
@Override
public void keyPressed(KeyEvent e) {
// System.out.println("按下:"+e.getKeyCode());
/* if(e.getKeyCode()==KeyEvent.VK_LEFT) {
left = true;
}*/
p1.addDirection(e);
}
@Override
public void keyReleased(KeyEvent e) {
// System.out.println("抬起:"+e.getKeyCode());
/* if(e.getKeyCode()==KeyEvent.VK_LEFT){
left=false;
}*/
p1.minusDirection(e);
}
}
private Image offScreenImage=null;
public void update(Graphics g){
if(offScreenImage==null)
offScreenImage=this.createImage(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);//这是游戏窗口的宽度和高度
Graphics gOff=offScreenImage.getGraphics();
paint(gOff);
g.drawImage(offScreenImage,0,0,null);
}
public static void main(String[] args) {
MyGameFrame gameFrame=new MyGameFrame();
gameFrame.launchFrame();
}
}
老师,我这个炮弹与飞机碰撞之后飞机直接消失,没有出现爆炸效果是怎么回事