- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java游戏编程原理与实践教程课件第6章—陈锐夏敏捷主编
Java游戏编程原理与实践教程;《雷电》游戏因为操作简单,节奏明快,因此,作为纵轴射击的经典之作,《雷电》系列受到了广大玩家的欢迎,可以说是老少咸宜的游戏了。
本章开发模拟雷电的飞机射击游戏, 下方是玩家的飞机,能自动不断地发射子弹,上方是随机出现的敌方飞机(数量不超过5架)。玩家可以通过键盘的方向键控制自己飞机的移动,当玩家飞机的子弹碰到敌方飞机时,敌方飞机出现爆炸效果。运行效果如图6-1所示。; 游戏界面和相关图片素材 ;6.2.2 地图滚动的原理实现
举个简单的例子吧,大家都坐过火车吧,坐火车的时候都遇到过自己的火车明明是停止的,但是旁边铁轨的火车在向后行驶,会有一种错觉感觉自己的火车是在向前行驶。飞行射击类游戏的地图原理和这个完全一样。玩家在控制飞机在屏幕中飞行的位置,背景图片一直向后滚动从而给玩家一种错觉自己控制的飞机在向前飞行,如下图6-3所示两张地图图片(map_0.png,map_1.png)在屏幕背后交替滚动,这样就会给玩家产生向前移动的错觉。;;如果按照这样的思路将会频繁的创建子弹对象与敌机对象这样会造成内存泄漏等严重的问题。仔细想一下屏幕中须要绘制的子弹数量与敌机数量肯定是有限的,我们可以初始化固定数量的子弹对象与敌机对象,只对这些对象进行更新逻辑与绘制。
举个例子,当前游戏屏幕中最多须要5架敌机,代码中就只产生5个敌机对象,分别检测这些对象,如果被子弹打中或者向下超过屏幕底边,这时候可以对这个对象进行属性的重置,让这架飞机从新出现在上方的战场上,这样就实现在不增加飞机对象的情况下让玩家感觉有打不完的飞机,子弹对象同理。
游戏开始时将所有飞机、子弹对象全部初始化,也就是说游戏中不会在分配新对象内存。
游戏过程中,不断更新游戏背景图片位置,下移10个像素,实现向下滚动效果。更新子弹位置,每次15个像素。更新敌机位置(每次5个像素),敌机死亡且爆炸动画结束或者敌机超过屏幕还未死亡重置敌机坐标位置。同时每隔500毫秒添加一发子弹并初始化其位置坐标在玩家飞机前方(注意15个子弹对象虽然已经存在,但是被初始化在屏幕外不能显示出来)。最后调用Collision()检测子弹与敌机的碰撞。;
6.3 关键技术
6.3.1 多线程
多线程编程可以使程序具有两条或两条以上的并发执行任务,就像日常工作中由多人同时合作完成一个任务。这在很多情况下可以改善程序的响应性能,提高资源的利用效率,在多核CPU年代,这显得尤为重要。
6.3.2 Java的Thread类和Runnable接口
Java中编程实现多线程应用有两种途径:一种是创建用户自己的Thread线程子类,一种是在用户自己的类中实现Runnable接口。
1. Thread
Thread类是一个具体的类,该类封装了线程的属性和行为。
2. Runnable接口
Runnable接口只有一个方法run(),所有实现Runnable接口的用户类都必须具体实现这个run()方法,为它书写方法体并定义具体操作。当线程转入运行状态时,它所执行的就是run()方法中规定的操作。;6.4 雷电飞机游戏设计的步骤
6.4.1 设计子弹类(Bullet.java)
子弹类构造方法中,加载子弹的4帧状态图片(图6-5所示),在绘制子弹时,根据mPlayID绘制相应状态的图片。;6.4 雷电飞机游戏设计的步骤
6.4.2 设计敌机类(Enemy.java)
在项目中创建一个的Enemy类,用于表示敌机,实现子弹坐标更新,绘制功能。功能与子弹类相似。
敌机类构造方法中,加载敌机???炸时的6帧状态图片,在绘制爆炸时,根据mPlayID绘制相应爆炸状态的图片(图6-6所示)。敌机本身为存活状态时仅一种状态图片,不需要切换。
图6-6 敌机爆炸时的6帧图片
;6.4 雷电飞机游戏设计的步骤
6.4.3 设计游戏界面类(GamePanel.java)
在项目中创建一个继承JPanel的GamePanel类,用于实现游戏界面,完成子弹发射、敌机移动,碰撞检测等功能。
6.4.4 设计游戏窗口类(planeFrame.java)
在项目中创建一个继承JFrame的planeFrame类,用于显示自定义游戏面板界面。
文档评论(0)