4.16Java游戏小项目之爆炸的实现

4.16Java游戏小项目之爆炸的实现

需求描述

飞机被炮弹击中需要一个爆炸效果

技术实现

  • 定义一个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);
          }

很多游戏的本质就是在按下一个键以后进行图片的轮播。拳皇也是如此

posted @ 2021-04-16 21:11  俊king  阅读(315)  评论(0编辑  收藏  举报