zoukankan      html  css  js  c++  java
  • 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!!!
  • 相关阅读:
    BZOJ-2743: [HEOI2012]采花(树状数组 or TLE莫队)
    BZOJ-1122: [POI2008]账本BBB (单调栈神题)
    2017年10月18日23:54:18
    [校内自测 NOIP模拟题] chenzeyu97要请客(单调栈)
    BZOJ-1057: [ZJOI2007]棋盘制作(单调栈)
    [校内自测] 奶牛编号 (递推+智商)
    [校内自测] Incr (LIS+智商)
    BZOJ1486 [HNOI2009]最小圈
    BZOJ2400 Spoj 839 Optimal Marks
    BZOJ2595 [Wc2008]游览计划
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14668776.html
Copyright © 2011-2022 走看看