




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java游戏编程原理与实践教程主编主编 陈锐陈锐 夏敏捷夏敏捷人民邮电出版社人民邮电出版社 游戏开发是艺术与科学的结合,是策划,美术,程序三者间的协调以及创意与商业的平衡,集故事、音乐、动画等多元素于一身。 目前Java不仅可以开发台式机游戏,而且随着智能手机的普及,目前支持Java的手机性能上已经接近第二代控制台游戏机,因此手机游戏大规模使用的时代已经来临,可见Java 游戏开发市场广大。第4章 Java游戏程序的基本框架4.1 动画的类型及帧频动画的类型及帧频动画的制作是游戏设计的基础,几乎所有的游戏都是在动画的基础上添加人机交互功能、以及增加剧情功能等等延伸来的。因此动画的制作是游戏开发
2、的必须了解的知识,也是游戏制作基本元素。4.1.1 动画类型动画类型动画主要分为影视动画和游戏动画两种。影视动画就是使用专业动画软件编辑出来的效果很好的动画视频,投影机以每秒二十四格的速度投射在银慕上. 游戏动画则不同于影视动画,是在屏幕上显示一系列连续动画画面的第一帧图形,然后在每隔很短的时间显示下一帧图像,如此反复 4.1.2 设置合理的帧频设置合理的帧频FPSFPS顾名思义,就是每秒钟的帧数。每一帧就是一幅静态图像,电影的播放速度是24FPS,但是一般游戏速度达到10FPS就明显感觉到动画的效果了。 4.2 游戏动画的制作游戏动画的制作4.2.1 绘制动画以及动画循环既然动画就是将一连串
3、的图像快速的循环播放,所以就需要使用循环语句控制图像的连续播放,由于动画需要一定的播放速度,因此需要连续播放动画的同时能够控制动画的播放速度,最好使用线程中的暂停函数来实现。while(true)处理游戏功能;使用repaint()函数要求重画屏幕暂停一小段时间;/帧频FPS控制4.2.2 消除动画闪烁现象双缓冲技术一个动画在运行的时候,如果图像的切换是在屏幕上完成的,则可能会造成屏幕的闪烁,消除动画闪烁现象的最佳方法是使用双缓存技术。双缓冲技术的工作原理:先在内存中分配一个和我们动画窗口一样大的空间(在内存中的空间我们是看不到的),然后利用getGraphics()方法去获得双缓冲画笔,接着
4、利用双缓冲画笔给空间我们想画的东西,最后将它全部一次性的显示到屏幕上这样在我门的动画窗口上面是显示出来就非常的流畅了避免了上面的闪烁效果。4.3 使用定时器使用定时器定时器在游戏开发中是相当重要的,前面提到动画的实现就是通过显示时间的控制达到视觉暂停的效果,除了使用线程的暂停函数sleep()函数外,还有一个重要的计时工具,那就是Timer组件。Timer组件可以定时执行任务,这在游戏动画编程上非常有用。Timer组件可以使javax.swing.Timer包中的Timer类来实现,该类的构造方法为:Timer(intdelay, ActionListenerlistener);在游戏编程中,
5、在组件内容更新时经常用到Timer,例如JPanel、JLabel等内容更新。本书中俄罗斯方块游戏就采用定时器Timer实现控制方块的下落的。下面是一个简单的每隔500毫秒显示时间的Swing程序3-2,可以加深对Timer的使用的理解。4.4 设置游戏难度设置游戏难度一般来说,一款游戏要增强它的可玩性,就需要有合理的游戏难度,使玩家不容易感觉厌烦,同时增加玩家者的挑战欲望。例如智力游戏可以在人工智能方面下功夫,但是由于人工智能在游戏里面很难真正的控制游戏本身的难度,所以往往使通过其他的手段实现游戏的难度控制,比较增加游戏进行的速度,比如俄罗斯方块,可以增加方块下落的速度。或者使用增加游戏关数
6、、减少玩家的思考时间等等。难度的设置的开发需要根据具体的游戏情况而定,很难一概而论。如果使用速度控制游戏难度,则可以把游戏设计成为具有很多个级别,每隔级别游戏的运行速度都不一样,类似的代码可以如下所示:public void level()if(level =3)speed = 1;/设置游戏速度为设置游戏速度为1else if(level = 4)speed = 2;/设置游戏速度为设置游戏速度为24.5 游戏与玩家的交互游戏与玩家的交互对于游戏而言,交互性就是生命,优异的作品总是体现在人物与场景之间的高互动性、人物与人物(NPC)之间的高互动性以及玩家与玩家之间(多人模式)的高互动性,这是
7、真正能让人溶入其中的动力所在,因此一款好的游戏必然拥有一个良好的游戏与玩家之间的互动方式。游戏与玩家的交互都是通过键盘或者鼠标实现的。具体的方法在第1章中已经详细介绍了。下面举一个简单的例子,在小球下落时可以通过键盘控制其左右移动。由于实现键盘监听,所以TetrisPanel加入KeyListener接口。同时为控制X坐标增加xpos变量。4.6 游戏中碰撞检测游戏中碰撞检测我们在游戏开发中总会遇到这样那样的碰撞,并且会很频繁的去处理这些碰撞,这也是游戏开发的一种基本的算法。常见碰撞算法是矩形碰撞,圆形碰撞,像素碰撞。矩形碰撞用的最多。4.6.1 矩形碰撞矩形碰撞通过检测一个矩形的4个顶点是否
8、在另外一个矩形的内部来完成 .4.6.2 圆形碰撞圆形碰撞可以通过比较两个对象间的距离和两个对象半径的和的大小,很快实现这种检测。如果它们之间的距离小于半径的和,就说明产生了碰撞 4.6.3 像素碰撞像素碰撞4.7 游戏中图像绘制游戏中图像绘制Graphics类中提供了不少绘制图形的方法,但对于复杂图形,大部分都事先利用专用的绘图软件绘制好,将它们按一定的格式存入图像文件。Java程序运行时,将它装载到内存里,然后在适当的时机将它显示在屏幕上。4.7.1 图像文件的装载图像文件的装载Java目前所支持的图像文件格式通常有GIF、PNG和JPEG格式(带有.GIF、.JPG、.JPEG后缀名的文
9、件) .Java特别提供了java.awt.Image包来管理与图像文件有关的信息,因此执行与图像文件有关的操作时需要import这个包。java.awt.image包提供可用于创建、操纵和观察图像的接口和类。每一个图像都用一个java.awt.Image对象表示。除了Image类外,java.awt包还提供了其他的基本的图像支持,例如Graphics类的drawImage()方法,Toolkit对象的getImage()方法及MediaTracker类。Toolkit类提供了两个getImage()方法来加载图像。在Java中获取一个图像文件,可以调用Toolkit类提供getImage()
10、方法。但是getImage方法会在调用后马上返回,如果此时马上使用getImage获取的Image对象,而这时Image对象并没有真正装载或者装载完成。所以,我们在使用图像文件时,使用java.awt包中的MediaTracker跟踪一个Image对象的装载,可以保证所有图片都加载完毕。4.7.2 图像文件的显示图像文件的显示getImage( )方法仅仅是将图像文件装载进来,交由Image对象管理。而把得到的Image对象中的图像显示在屏幕上,则通过传递到paint()方法的Graphics对象可以很容易地显示图像。具体显示需要调用Graphics类的drawImage( )方法,它能完成将
11、Image对象中的图像显示在屏幕的特定位置上,就像显示文本一样方便。drawImage( )方法的常见调用格式如下:boolean drawImage(Image img, int x, int y, ImageObserver observer) 4.7.3 绘制卷轴型图像卷轴型图像通常都要超过程序窗口的尺寸,若采用上一节介绍的图像绘制方法来绘制卷轴型图像,则只能显示出图像的一部分。事实上,在绘制卷轴型图像时往往都需要让其滚动显示以制造移动效果,让图像的不同部分依次从程序窗口中“经过”,就如同坐火车的情形,卷轴型图像好比风景,程序窗口则好比车窗。 图图4-5 图像坐标系到程序序窗口坐标系的变
12、换图像坐标系到程序序窗口坐标系的变换图中的坐标变换可通过调用程序窗口的Graphics对象的另一个drawlmage方法来实现,该方法带有10个参数,具体定义如下:drawlmage(im, t dxl, f dyl, dx2, dy2, : sxl, sylr sx2, sy2, observer);其中第1个参数表示源图像,第2至第9个参数的含义如图4-5所示: dxl和dyl为目标区域左上角坐标; dx2和dy2为目标区域右下角坐标; sxl和syl为源区域左上角坐标; sx2和sy2为源区域右下角坐标。 图图4-5 图像坐标系到程序序窗口坐标系的变换图像坐标系到程序序窗口坐标系的变换4
13、.7.4 绘制砖块型图像砖块型图像的尺寸通常较小,其绘制过程类似于在程序窗口“贴瓷砖”,即将窗口区域按砖块型图像的尺寸划分为许多小方格,然后在相应的方格内绘制图像,如图4-6所示。图图4-6 4-6 砖块型图像砖块型图像例如推箱子游戏每关的地图信息放入二维数组中,可以和网格对应。其中存储1代表pic1.jpg砖块型图像,2代表pic2.jpg砖块型图像,依次类推。存储0代表此处不绘制砖块型图像。4.8 游戏角色开发游戏角色开发游戏角色也叫做游戏精灵(Spirte),是指游戏中可移动的物体,主要包括玩家控制的角色、NPC(电脑控制角色,如怪物,敌机等)。在游戏中精灵通常那个可以活动的,往往需要通
14、过连续地绘制多幅静态图像来表现其运动效果,如图4-9所示。这里我们设计一个这里我们设计一个Sprite类,主要用来实现游戏里面的人物动画、移动。使用类,主要用来实现游戏里面的人物动画、移动。使用Sprite类可以读取一个个小图片,并且把它们按照一定的顺序存储在数组里面,类可以读取一个个小图片,并且把它们按照一定的顺序存储在数组里面,然后在屏幕上显示出来其中的一个小图片,如果连续的更换显示的小图片,则然后在屏幕上显示出来其中的一个小图片,如果连续的更换显示的小图片,则屏幕上表现为一个完整的动画效果。屏幕上表现为一个完整的动画效果。假如假如Sprite人物动画由人物动画由4帧状态图片(图帧状态图片
15、(图4-10所示),在绘制人物时,根据所示),在绘制人物时,根据mPlayID绘制相应状态的图片绘制相应状态的图片 下面的例子展示了如何显示一个精灵走动的动画,一个精灵从屏幕的左方往右走,显示精灵走动的SpritePanel类的代码如下所示: 4.9 游戏声音效果设定 Java提供了丰富的API用于对声音进行处理和播放,其中最常用的是一个使用数字化样本文件工作的包,专门用于载入声音文件并通过音频混合器进行播放。该包叫做javax.sound.sampled, 其所支持的声音文件格式有以下几种:AIFF, AU , WAV。 Java中播放声音文件与显示图像文件一样方便,同样只需要先将声音文件装载进来,然后播放就行了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 知识产权共有与品牌授权及市场推广合作协议
- 政认识民法典课件-2024-2025学年统编版道德与法治七年级下册
- 医学减肥健康宣教
- 《应对地震安全:教育课件》
- 服务基本礼仪培训
- 《IPv6解决方案》课件
- 《临床用药管理与策略》课件
- 信息机房安全培训课件
- 《临床护理操作规程》课件
- 《慢性心力衰竭治疗》课件
- 新技术、新工艺、对提高工程质量、缩短工期、降低造价的可行性
- 金属矿床地下开采复习题及答案
- GB 5009.34-2022食品安全国家标准食品中二氧化硫的测定
- 教学课件《断裂力学》
- 慢阻肺的管理课件
- 电工基本知识培训资料课件
- 北师大版《相遇问题》公开课课件
- 邻补角、对顶角、同位角、内错角、同旁内角经典习题-一对一专用
- HP系列培训手册
- 毕业论文-原油电脱水方法与机理的研究
- 陕西省2022年普通高中学业水平考试(真题)
评论
0/150
提交评论