• 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);
              }

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

    It's a lonely road!!!
  • 相关阅读:
    Laravel 进阶笔记 3
    Laravel 进阶笔记 5
    Laravel 进阶笔记 4
    Laravel 进阶笔记 2
    Laravel 进阶笔记
    Laravel笔记.
    Think PHP-- 笔记3
    git删除远程分支
    Think PHP 3.2.3 伪静态的方法
    解决iframe IE8透明不兼容
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14668776.html
Copyright © 2020-2023  润新知