- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验 . 游戏框架和碰撞检测.doc
实验1 游戏框架和碰撞检测
实验目的:
理解游戏程序的基本框架结构
掌握Java 2D图形设计和动画设计的方法
掌握Java 2D动画设计的方法
理解2D游戏中物体的基本运动规律
掌握2D游戏中的碰撞检测方法
实验内容和步骤:
任何类型的计算机游戏都有类似的基本框架结构,游戏程序的主体是一个循环,每次循环完成如下两步工作:
更新游戏逻辑:要首先获取用户输入,然后根据用户的输入,修改游戏中描述各个角色和元素属性的相关数据;
绘制下一帧游戏画面:根据上一步更新的数据,在屏幕上绘制新的一帧游戏画面。
Java语言使用Graphics类和Graphics2D类来绘制2D图形和图像。使用Graphics类可以绘制简单的图形和多边形;Graphics2D类是Graphics类的派生类,除了可以绘制各种图形,还可以使用它完成图形的平移、伸缩、裁剪等坐标变换等复杂的操
稳定的帧速率可以使游戏的画面既流畅、又稳定,实践证明当动画的帧速率在30帧/秒以上时,游戏动画看上去比较流畅;同时必须把游戏画面的帧速率控制在一个较小的范围内,以达到动画稳定的效果。
可以使用Java的多线程程序设计技术来获得稳定的动画帧速率;也可以使用Java语言中的Timer类和TimerTask类相配合,以获取稳定的画面帧速率。
本次实验的第一个任务要求学生设计程序,以稳定的帧速率实现小球弹跳的动画效果。
程序运行画面如图1.1所示
在2D游戏中,物体的运动可以分成直线运动和曲线运动两种类型;其中直线运动又可以分成匀速直线运动和加速直线运动;曲线运动可以分成匀速曲线运动和加速曲线运动。匀速直线运动的物体坐标计算公式为:
x=x+dx , y=y+dy
加速直线运动的物体坐标计算公式为:
x=x+dx, y=y+dy, dx=dx+dcx, dy=dy+dcy
2D游戏中有2种常用的碰撞检测方法:
边界检测法:判断两个物体的坐标范围是否存在交集。
中心检测法:计算两个物体中心的距离,判断它是否小于一个指定的值。(例如判断两个圆型的圆心距离是否小于大圆的半径)
本次实验的第二个任务要求学生编写程序实现小球打砖块游戏。游戏的开始画面如图1.2所示:
游戏开始时,小球停在下方的档板上静止不动,当玩家按下空格键后,小球开始向斜上方做匀速直线运动,如果小球碰到上方的砖块,则被碰到的砖块消失。若小球碰到窗体的上边界和左右边界,就被弹回继续做匀速直线运动。玩家可以用键盘上的左右箭头键来操作档板,使其左右移动;当小球向下方运动时,如果小球碰到档板,则被档板弹回;否则,如果小球没有碰到档板,则飞出窗体下边界,这时可以回到游戏的初始状态(档板回到窗体下部中间位置,其上出现一个静止的小球,但砖块的数目保持不变),玩家可以再次开始游戏,直到把所有砖块打掉为止。
设计三个类Pad类、Block类和Ball类分别表示档板类、砖块类和小球类。每个类中都有更新自身状态的update方法和绘制自身的draw方法。
再设计两个类:GamePanel类和GameFrame类,GamePanel类是Panel类的子类,是用来显示游戏画面的面板窗体,同时GamePanel类还用来接收并响应用户的输入。GameFrame类是Frame类的子类,其内容窗格是GamePanel类的对象
实验重、难点:
为了使画面中活动的物体没有闪烁的现象,需采用“双缓冲机制”来绘制动画画面:活动物体的闪烁现象是由不断的擦除和重绘操作造成的,为了消除闪烁,可以在一个单独的缓冲区中绘制游戏的下一帧画面,然后再把它完整的显示到屏幕上,这种方法称为“双缓冲机制”。
当小球碰到窗体的边界时,会发生弹跳,这时需要进行碰撞检测。碰撞检测是游戏程序设计中的一项常用技术。
如何获取稳定的帧速率是本次实验设计的一个难点。
碰撞检测技术是本游戏的重点和难点。在游戏中,运动的小球会与三种不同物体发生碰撞,它们分别是窗体边界、转块和档板。与窗体边界的碰撞检测最简单,可使用边界检测法实现;与砖块的碰撞检测处理最复杂,因为小球可以从不同的方向和砖块发生碰撞,碰撞后小球的弹射方向也不相同;而小球与砖块的碰撞部位不同,也会影响小球的弹射方向。可把小球与砖块的碰撞分成以下几种情况进行检测和处理:
如图1.3所示,可以把一个砖块划分成三个不同的区域R1、R2和R3,当碰撞发生在R2区域:dy变为相反数,dx不变。
当碰撞发生在R1区域时,若来球方向为左(dx0),dx变为相反数,dy不变;否则,dy变为相反数,dx不变
当碰撞发生在R3区域时,若来球方向为右(dx0),dx变为相反数,dy不变;否则,dy变为相反数,dx不变
小球与档板的碰撞发生在档板的上部,可采用类似与砖块的碰撞检测方法来实现,但是简单的
文档评论(0)