13.8-全栈Java笔记:打飞机游戏实战项目|Explode|MyGameFrame|Plane

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了13.8-全栈Java笔记:打飞机游戏实战项目|Explode|MyGameFrame|Plane相关的知识,希望对你有一定的参考价值。

爆炸效果的实现

飞机被炮弹击中后,需要出现一个爆炸效果,让我们的画面更刺激。 爆炸效果的实现在游戏开发中也很常见。

我们定义Exlode类来表示爆炸的信息,爆炸类和普通类不一样的地方在于他实际上存储了一系列爆炸的图片,然后,进行轮播。最后,我们看到的就是一组酷炫的效果。

我们这里准备了一系列爆炸图片:

技术分享

从爆炸开始的一个小火球到大火球,再到消失时的小火球。爆炸对象只需轮流加载这些图片即可。

我们将这些图片拷贝到项目下面,新建:images/explode文件夹,并将16张图片拷贝到文件夹下面。

技术分享

爆炸类的基本设计

【示例1】爆炸类Explode

package cn.sxt.game;

 

import java.awt.Graphics;

import java.awt.Image;

 

/*

 * 爆炸类

 */

public class Explode {

           double x,y;

           static Image[ ] imgs = new Image[16];

           static {

                     for(int i=0;i<16;i++){

                                imgs[i] = GameUtil.getImage("images/explode/e"+(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来控制到底画哪个图片,由于我们图片命名非常规范,是按照顺序从1-16,这样程序依次读取这些图片对象即可。


主窗口类创建爆炸对象

如果要显示爆炸对象,我们仍然需要在主窗口中定义爆炸对象,并且在飞机和炮弹碰撞时,在飞机坐标处创建爆炸对象,显示爆炸效果。

【示例2】MyGameFrame:增加爆炸效果

public class MyGameFrame extends Frame {

           Image bgImg = GameUtil.getImage("images/bg.jpg");

           Image planeImg = GameUtil.getImage("images/plane.png");

 

           Plane plane = new Plane(planeImg,300,300,3);

          

           ArrayList<Shell>  shellList = new ArrayList<Shell>(); 

          

           Explode bao;//创建爆炸对象

          

           //paint方法作用是:画出整个窗口及内部内容。被系统自动调用。

           @Override

           public void paint(Graphics g) { 

                     g.drawImage(bgImg, 0, 0, null);

                    

                     plane.drawMySelf(g);     //画出飞机本身

                    

                     //画出容器中所有的子弹

                     for(int i=0;i<shellList.size();i++){

                                Shell   b =  shellList.get(i);

                                b.draw(g);

                               

                                //飞机和所有炮弹对象进行矩形检测

                                boolean peng = b.getRect().intersects(plane.getRect());

                                if(peng){

                                          plane.live = false;     //飞机死掉,画面不显示

                                         

                                          if(bao==null){

                                                     bao = new Explode(plane.x,plane.y);

                                          }

                                          bao.draw(g);

                                }

                     }

           }        

           //其余代码和上一个版本一致,限于篇幅,不再展示

}

 程序执行结果,当飞机和炮弹碰撞时发生爆炸,如图3所示:

技术分享




「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。


 笔记包含从浅入深的六大部分:

 A-Java入门阶段

 B-数据库从入门到精通

 C-手刃移动前端和Web前端

 D-J2EE从了解到实战

 E-Java高级框架精解

 F-Linux和Hadoop 


本文出自 “全栈Java笔记” 博客,请务必保留此出处http://javanew.blog.51cto.com/12931675/1954200

以上是关于13.8-全栈Java笔记:打飞机游戏实战项目|Explode|MyGameFrame|Plane的主要内容,如果未能解决你的问题,请参考以下文章

13.3-全栈Java笔记:打飞机游戏实战项目|PaintThread|launchFrame

13.2-全栈Java笔记:打飞机游戏实战项目|Graphics|ImageIO|GameUtil

13.9-全栈Java笔记:打飞机游戏实战项目|Time|Plane|其他案例展示

13.7-全栈Java笔记:打飞机游戏实战项目|Rectangle|intersects|Plane

13.6-全栈Java笔记:打飞机游戏实战项目|Shell|speed|launchFrame

13.4-全栈Java笔记:打飞机游戏实战项目|offScreenImage|GameObject|Plane