收藏 分销(赏)

学位论文-—artillery-fire游戏的设计与实现.doc

上传人:可**** 文档编号:2591853 上传时间:2024-06-01 格式:DOC 页数:44 大小:8.19MB
下载 相关 举报
学位论文-—artillery-fire游戏的设计与实现.doc_第1页
第1页 / 共44页
学位论文-—artillery-fire游戏的设计与实现.doc_第2页
第2页 / 共44页
学位论文-—artillery-fire游戏的设计与实现.doc_第3页
第3页 / 共44页
学位论文-—artillery-fire游戏的设计与实现.doc_第4页
第4页 / 共44页
学位论文-—artillery-fire游戏的设计与实现.doc_第5页
第5页 / 共44页
点击查看更多>>
资源描述

1、哈尔滨工业大学 分类号 密级 UDC 学号 2010004680 论 文 题 目 “Artillery Fire”游戏的设计与实现 Thesis Topic Design and Implementation of Artillery Fire the Game 学 生 姓 名 荣子豪 学 号 2010004680 所 在 院 系 软件学院 专 业 班 级 1011班 导师姓名职称 完 成 日 期 2014年5月7日 2014 年4月25哈尔滨工业大学Artillery Fire游戏的设计与实现摘 要我的毕业设计的主题为一款电子游戏的设计制作,游戏灵感来源于“Angry Birds”,并加以改

2、进,加入我自己的新鲜元素。游戏的设计突出两个个重点特色;物理效果,3D效果。流畅的物理效果会为游戏的交互体验增添很多趣味;3D效果是当代游戏的主流视觉效果,给人以逼真的视觉感受。基于这两点,游戏的制作采用了Panda3D 1.7.2 游戏引擎,采用Python API。游戏的定名为Artillery Fire,目前最新版本为V1.0.2;游戏以安装程序的形式打包发布,安装过程简洁。在游戏中,体验者通过键盘操纵一门火炮,目标是处在砖块壁垒上的蓝色小球,命中所有蓝色小球即可过关。此外,在V1.0.2中还加入了“Bomb Mode”:体验着可以切换为“炸弹模式”,通过发射一枚威力十足的爆炸性炮弹来达

3、到目的。本文集中阐述了一款PC平台3D游戏的开发全程。首先您将了解到PC电子游戏的发展简史,以及当下世界PC电子游戏的新形势与新趋势。接下来,您将了解到一些与游戏开发紧密相关的该念;理解这些概念对于理解游戏开发中的诸多技术细节有很大帮助。然后,拜访一下Python,并看看Python与之后我们要见到的Panda3D游戏引擎的联系。接着,正式向您介绍Panda3D游戏引擎。这里您将充分了解到Panda3D的整体结构以及特色;更多地,各个组成部分的内部细节,以及组织形式。现在,我们可以说说Artillery Fire,包括游戏的组成与布局以及逻辑流程,以及各部分实现的细节,包括第一手的代码。关键字

4、:游戏;PC;3D;Panda3D;Python;游戏引擎哈尔滨工业大学Design and Implementation of Artillery Fire the GameAbstractMy project of graduate is about designing and making of a video game inspired by the innovation of Rovios Angry Birds, and, furthermore, with some advance and personal style in multiple respects.The desig

5、n of the game emphasis on two features : physical effects, 3D effects. Fluent physical simulation makes players experience during interacting with the virtual world more interesting; 3-Dimensional graphics is the major visual effect adopted tremendously by recently released games, producing realisti

6、c visual experience. With these two initial decision in mind, the game is implemented with massive support of Panda3D Game Engine 1.7.2, all function wrapped into Python Interface.The game is named Artillery Fire, whose most current version is numbered as V1.0.2; the game is wrapped into a installer

7、 for distribution.In the game, the player will manipulate a set of cannon to shoot targets : blue frowney. The blue frowneys are positioned on barricades made up of bricks. Getting all of them shot will carries the player through the level. Besides, in Artillery Fire V1.0.2, a new node, Bomb Mode, i

8、s added in : the player could switch to this mode and launch explosive projectiles to attain multiple tactical purpose.This paper introduces the whole development process of a 3D video game running on PC platforms. Firstly, you will learn about a brief introduction to the evolution of PC video game,

9、 and the now-a-days situation of video games worldwide, and also some new trends and new features. Next, a formal meeting with Panda3D game engine. Here you are going to catch a hold to the framework and macro layout of Panda3D, and some unique features of this very engine. There is more on the deta

10、ils on the main sub-modules and the internal structures. Finally, we touch down to the newly developed game, Artillery Fire, including the elements, layout and the logical procedures of the games runtime.Keywords : Game; PC; 3D; Python; Game Engine目 录摘 要iAbstractii1 绪 论11.1 本文及本设计的动机11.2 大的背景11.3 本文

11、所关注的12 PC电子游戏简介22.1 电子游戏起源22.2 PC游戏的兴起22.3 由PC游戏引发的一些问题33 游戏开发中的基础概念43.1 硬件43.2 软件44 Artillery Fire涉及技术54.1 Python简介54.1.1 何为Python?54.1.2 Python简史54.2 Panda3D引擎54.2.1 Panda3D简介54.2.2 Panda3D的历史54.2.3 Panda3D的许可64.2.4 Panda3D的设计64.2.5 Panda3D中的重要概念65 Artillery Fire的设计与实现85.1 Artillery Fire简介85.2 Art

12、illery Fire的局部设计85.2.1 设置游戏虚拟世界85.2.2 设置游戏场景85.2.3 设置抛射物95.2.4 设置目标105.2.5 设置障碍物墙115.2.6 对于碰撞的处理135.2.7 处理操作者输入145.2.8 游戏主循环165.2.9 建立游戏主菜单185.2.10 建立关卡菜单205.2.11 设置炮口火焰225.3 关于V1.0.2版本中的新特点235.3.1 设置爆炸235.3.2 设置爆炸火焰效果245.3.3 表现爆炸火焰245.3.4 关闭爆炸25结 论26参考文献27致 谢28外文文献29外文翻译36哈尔滨工业大学1 绪 论1.1 本文及本设计的动机我

13、喜欢玩游戏,但在玩游戏的同时我在思考游戏的实现方式。因此,我对于进行一款电子游戏,尤其是3D电子有的设计与制作一直有着浓厚兴趣;这次毕业设计可以说是一个很好的锻炼机会。对于当代电子游戏的诸多现象,我也有着自己的思考。比如很多的游戏有着大量令人不适的血腥暴力因素等等,对青少年游戏玩家的身心健康有着严重的损害。我认为游戏的制作者应秉承对社会负责的原则,设计制作的作品应对他人有积极正面的引导作用,同时给予人充分的高级享受。例如,Angry Bird就是一款富有趣味而且内容健康的电子游戏。以上观点正是我进行此次毕业设计的创作以及毕业论文的阐述的动机。1.2 大的背景在当下,电子游戏的热浪席卷了全球,逐

14、渐成为人们的休闲方式之一,为人们带来很多的欢乐。国内有着空前巨大的市场,对优秀电子游戏的需求十分强烈,而且国内电子游戏平台仍以PC为主;同时超大型的电子游戏在对机器和设备的性能要求之高决定了它们的运行平台会坚守PC以及其他专属平台。因此,PC电子游戏开发具有广阔的前景,并且对其他平台的游戏应用有着指导意义。电子游戏是创意、艺术、技术的结合,更是软硬件高端科技水平的体现之一,对于计算机学科各领域的技术有着广泛的应用,例如CG技术,AI技术等。同时,技术的支持使游戏可以表现出神奇的效果;人们已将电子游戏纳入到当代艺术门类之中,而电子游戏以不同以往的艺术形式从多种感官给人们带来全新的、震撼的享受。因

15、此,对于电子游戏开发技术的研究具有众多的意义。此毕业设计是一款游戏的开发。通过游戏的开发全程可以涉及到多方面的技术,并对这些领域产开探讨,以此达到对当代游戏开发的技术难点的知晓,并总结当代具有特色的游戏背后的技术细节以及各种实现方式。1.3 本文所关注的自从1987年世界(主要是北美)电子游戏产业大崩塌后,主机独占的电子游戏开始被PC平台的电子游戏赶超,从中崛起了如今依然响亮的电子游戏巨擘,如Electronic Arts(EA),电子游戏的设计开发也登上了一个崭新的台阶。由于PC电子游戏运行于OS之上,如Microsoft DOS以及Microsoft Windows,游戏可以采用遵照标准定

16、义的图形库等对底层API的良好包装;游戏引擎可以被更加广泛地利用。因此s,众多的游戏制作公司采用第三方的图形库,甚至整体的游戏引擎已是家常。而使用开源且拥有自由软件许可的游戏引擎则给了游戏设计者巨大的施展空间。Panda3D Game Engine就是这样一个游戏引擎。从2008年Disney发布BSD License至今,Panda3D Game Engine在开发者社区和美国高校的联合努力下,已成为运行稳定、性能良好且技术全面的引擎。本次设计正是采用了Panda3D Game Engine。从论文以下篇章的内容中您将了解到本文次设计的主要技术相关内容以及设计细节。2 PC电子游戏简介2.1

17、 电子游戏起源早期的电子游戏的图像显示格式多种多样,并不统一。世界上最早的电子游戏名为“Cathode Ray Tube Amusement Device”(阴极射线管娱乐设备),设计者为Thomas T. Goldsmith Jr. 和 Estle Ray Mann,与1947年1月25日登记专利,并于1948年12月14日面世。这款游戏的灵感来源于雷达显示屏,使用者操作一个模拟信号发生设备,来控制屏幕上的坐标点;被操纵的坐标点代表“导弹”,而屏幕上其他一些静滞的坐标点代表“目标”。1971年,由Nolan Bushnell和Ted Dabney设计开发的“Computer Space”成为

18、了第一款商业发售,并且采用投币操作的电子游戏。紧接着,1972年,Atari公司发行了名为“Pong”的电子游戏的街机版本,获得了巨大的商业成功;Atari与1975年又发行了“Pong”的家庭版,极大地促进了电子游戏的流行程度。接着,以疯狂速度海量出现的“Pong”的相似克隆体最后导致了1977年的“电子游戏大崩塌”。最终,1978年Taito公司的“Space Invader”获得胜利,标志着电子游戏黄金时代的来临,并激发了很多游戏生产商进入市场。电子游戏迅速遍布了各大商场,街边商店以及餐馆,逐渐成为了人们的主流休闲乐趣方式。很快,Atari的“Space Invader”登陆了Atari

19、的专属主机“Atari VCS”(后称Atari 2600),另这一主机的销售量番至四倍。这使得Atari扭亏为盈,并复兴了家用游戏市场,并带动了第二代游戏主机的诞生和发展,直至1983年的“北美电子游戏大崩塌”。此后,在第三代游戏主机的发展中,电子游戏的重心逐渐转向日本。2.2 PC游戏的兴起早期,第一代PC游戏多为文字交互游戏, 例如1976年的Adventure。随着1983年“北美电子游戏大崩塌”,游戏主机的销量跌至历史最低点。而PC市场则销量不断攀升;消费者对价格较低的彩色显示的个人计算机更感兴趣。到了1987年,IBM PC的市场占有迅速增加,这使得之前仅仅应用于事务处理的PC成为

20、了电子游戏最为重要的平台;已有超过三分之一的游戏是为PC定制的。1991年由id Software设计开发的“Hovertank 3D”面世,成为第一款第一人称射击游戏。1992年,id Software乘胜追击,推出“Wolfstein 3D”,成为了最为畅销的现代电子游戏之一,并奠定了第一人称射击游戏的地位。到了1996年,Microsoft Windows的兴起和Direct X, OpenGL等3D图形库的成熟,使得PC平台获得了更为广泛的认可。更高性能的图形加速器和不断提升的CPU技术极大提升了计算机电子游戏中的真实感。PC电子游戏游戏现在正处于追求更高质量3D画质的趋势。不像图像提

21、升对游戏性能的作用得到毋庸置疑的肯定,物理引擎的采用从出现就引起了争议,物理效果的实现对于游戏流畅性和画面连续性的影响。例如,2005年nVida发行的nVida PhysX PPU以及Havok Physics Engine。同时,很多的游戏出版商开始采用新的销售方式。在众多的策略中,主要的一种形式是“分集游戏”,是对较为早期的“扩充包”概念的改进。每版包含更少的游戏内容,价格更低。例如,“Half Life 2 : Episode One”就采用了这种想法,但却引起了人们对于游戏性价比的担忧。2.3 由PC游戏引发的一些问题PC电子游戏长时间以来备受争议,尤其是游戏中普遍存在的暴力。争议主

22、要围绕电子游戏内容对弱势人群的影响。美国心理学协会总结得出,电子游戏中的暴力内容会使儿童更加具有敌意。一些行业组织对此回应道,家长应加强对孩子行为活动的管理,但就美国境内而言,没有任何立法方式约束此类含有消极以及令人不悦内容的电子游戏。对电子游戏的沉迷是游戏备受批评的另一方面。因为沉迷于电子游戏会对人的健康与社交关系产生负面影响。沉迷电子游戏所带来的危害直观上看来与大型多人在线角色扮演游戏的流行成正比。3 游戏开发中的基础概念3.1 硬件PPUPhysics Processing Unit, 例如nVidia PhysX(正式名为AGEIA PhysX), 可以用来提升现代电子游戏中的物理效果

23、模拟性能。PPU允许计算机处理比原先单靠CPU时更为复杂的物体接触,这样就使得游戏的体验者可以更深入地在游戏世界中进行操作。3.2 软件APIApplication Programming Interface, 提供了游戏和操作系统之间的一个层面,简化了游戏的设计。Microsoft的“DirectX”就是一个被今日的电子游戏广泛采用的API,用于同图像和声音硬件进行交互。“OpenGL”是一个跨平台API,用于图像处理。在2013年晚些时候,AMD推出了“Mantle”,是一个专为AMD图形卡设计的低层API,比软件型API(如DirectX)具有更高的性能,也简化了PC平台游戏向Play

24、Station 4和Xbox One的移植,因为这二者都采用了AMD的硬件。如今,游戏公司采用第三方的游戏引擎、库以及API已经十分寻常。4 Artillery Fire涉及技术4.1 Python简介4.1.1 何为Python?Python是一门被广泛使用的多用途、高级程序设计语言。他的设计宗旨着重于代码的易读以及语法的简洁。Python支持多种程序组织方式,包括面向对象风格、指令风格、函数风格或步骤风格。它特有的动态类型系统和自动内存管理系统使程序的设计免去诸多繁琐细节,使程序设计者的注意力可以集中于解决问题的逻辑上。Python还有着超大的并涵盖全面的标准库。通常所说的Pyhon是指C

25、Pyton,是开源并免费的,由非营利组织Python Software Foundation管理。4.1.2 Python简史Python的构想始于上世纪80年代,并与1989年由Guido van Rossum在荷兰的CWI开始付诸实现,最初目的是作为“ABC语言”的接替者,具有异常处理功能,并可以运行于“Amoeba”操作系统上。Van Rossum是Python的首要作者,并对Python的后续发展方向起着中心作用。Python 2.0于2000年10月16日发布,包括了很多新特点,如内存管理中加入了完备的垃圾收集功能。Python3.0于2008年12月3日发布,对于以前版本不兼容。它

26、其中的诸多特点被逆向移植到了Python2.6以及Python2.7上。4.2 Panda3D引擎4.2.1 Panda3D简介Panda3D是一个集合了图像、音效、输入输出、碰撞监测以及其他与3D游戏创作有关的能力的游戏引擎。Panda3D是一个开源的并且于2008年5月28日开始免费的软件,使用者具有经过改革的BSD许可。因此,Panda3D对于免费游戏与商业游戏均可免费使用。Panda3D倾向于使用者运用Python进行游戏开发。引擎本身采用C+编写,并且使用了自动包装生成程序将所有功能以Python可调用的接口表现出来。这种独特的方式使游戏设计者可以利用Python的优势,例如快速开发

27、以及先进的内存管理。同时又使引擎内核拥有经过完整编译的语言的高效能。例如,引擎整合了Python的垃圾处理器,并且引擎的各种数据结构由Python的内存管理系统进行统一自动管理。4.2.2 Panda3D的历史Disney(迪士尼)VR Studio是Disney旗下一个专为Disney 主题公园打造3D奇幻效果的分支机构。他们打造了“Aladdin Magic Carpet”的3D奇幻效果,而为了实现这一效果的引擎最终演化成为了今日的Panda3D。如今的Panda3D Game Engine和之前的原始引擎已大不相同。逐渐,Panda3D被应用于Disney公园的其他3D旅程,后来被用于名

28、为“Toontown Online”的背景设定于卡通世界的在线游戏。之后,又被用于第二个MMORPG(超大型多人在线角色扮演游戏)“Pirates of Caribbean Online”(加勒比海盗)。2002年,引擎被以开源方式发布,目的是为了更良好地与各大学的虚拟现实研究项目合作。Panda3D引擎的开源使Carnegie Mellon Entertainment Technology Center加入了引擎的开发。主要的开发工作仍由Disney的工程师完成,Carnegie-Mellon 的团队则负责引擎的易用性改良,重要文档的撰写工作,以及问引擎增加高级功能,例如shaders。4.

29、2.3 Panda3D的许可2002年,引擎被开源时,开发者目标是创造一个自由软件许可。然而,这个许可有一些缺点,使它并不是真正意义上的自由:首先,这个版本的许可要求将对引擎做的一切改动上报到“Panda.ProjectD”;其次,引擎被禁止出口到美国政府实行贸易禁运的国家。在2008年5月28日,Panda3D的主体已改为实行BSD许可。Panda3D采用了多种第三方的库,这些库的许可并非自由软件,包括有nVidia Cg, DirectX,以及MFC等。这些模组中的大部分在Panda3D的安装过程中可以被排除在外。4.2.4 Panda3D的设计Panda3D是一个采用scence gra

30、ph组织的引擎。这就意味着游戏的虚拟世界最初是一个空的笛卡尔三维空间,等待着游戏设计者向其中加入模型。Panda3D对模型的尺寸大小并不区分;模型由建模程序创造,如Blender, 3ds Max或者Maya。生成的模型随后可以被加入到Panda3D的笛卡尔空间中。Panda3D的scene graph直接展现出了DirectX与OpenGL的基本功能。例如,在panda3D中设置Fog功能与DirectX或OpenGL采用完全一致的参数序列。Panda3D可以看作对低层次API的包装。而Panda3D与DirectX和OpenGL的区别在于,Panda3D会对场景进行存储,同时也提供了很多高

31、级的操作,例如模型载入,运行模型动态,监测碰撞等等。Panda3D最初设计时间早于Vertex和Pixel Shader(像素着色程序)的问世。直到2005年才允许游戏开发者自行加入完全人工编写的Shader。最近,开发者才为Panda3D加入了自动综合Shader的能力。如果3D模型设计者标明了Per-Pixle Lighting,就会自动引发shader合成到模型上。这样做是为了模型可以如模型设计者所愿展现出预期的效果,而不必由游戏程序设计者插手。4.2.5 Panda3D中的重要概念Scene GraphScene Graph是由Node链接而成的树。树的节点由PandaNode类的实例

32、组成。PandaNode衍生出了其他类,例如ModelNode,GeomNode,LightNode,等等。树的根是一个名为render的Node。(注意:另外还有其他的根做其他用途,例如,render2d,是2D对象的根。)NodePathNodePath是一个辅助用的类,是一个包含着对特定Node的pointer的小型对象,还含有另一些管理信息。生成Node的函数会返回一个NodePath类型的对象,指向新创建的Node。实际上,NodePath不完全是Node对象的“指针”。两者的区别似乎仅在于名字。然而,有些API函数要求参数为NodePath,而另一些API函数会要求Node poi

33、nter作为参数。通过调用一个NodePath对象的node方法,可以获得它代表的Node pointer,例如:nodepath.node()。NodePath方法与Node方法NodePath可以调用的方法有很多,调用的结果会正确地作用于对应的Node。但一些Node是比较特殊的,例如Cameras,拥有自己独特的方法。但最重要的是,当你调用NodePath的方法时,实际上是在操作它所指的Node对象。配置文件配置文件是位于Panda3D的etc文件夹下的Config.prc文件。它控制着Panda3D的几项重要选项:使用OpenGl还是DirectX,如何显示调试信息,等等。EGG文件E

34、GG文件可以包含静态模型、动态模型和动作数据。EGG文件通过将模型生成软件,例如Maya,Blender等,的模型导出得到。TextureTexture(纹理)是2D的图片文件,但是用来为3D的模型表面上色。Texture的坐标十分简单。(0, 0)表示左下角,(0, 1)表示左上角,(1,0)表示右下角,(1,1)表示右上角。ShaderShader是专为显示卡编写的程序,由显示卡运行。同时,shader可以自主获取Panda3D Runtime的数据。CameraPanda3D中的Camera也是一个PandaNode,因此可以向其他所有Node一样操纵。真正地camera是在ShowBa

35、se中定义的一个NodePath,名为base.cam。Task与EventTask是由Panda3D每一个frame或者每隔一段时间调用的函数或方法;而Event是由用户来定义触发方式的函数或方法。5 Artillery Fire的设计与实现5.1 Artillery Fire简介Artillery Fire是采用Panda3D Game Engine开发的3D游戏,运行于PC平台,图形库采用Direct X Library,物理引擎采用ODE(Open Dynamic Engine)。在Artillery Fire的虚拟世界中,游戏体验着将操纵Cannon进行瞄准,发射白色的Smiley小

36、球,目标是蓝色的Frowney小球。游戏中有关卡设置,使用有限的Smiley命中所有Frowney则过关。Artillery Fire中涉及到的主要有:base.camera, ground, skySphere, cannon, projectile, target, box。5.2 Artillery Fire的局部设计5.2.1 设置游戏虚拟世界以下函数进行游戏的虚拟世界的初始化设置。def setupEnvironment(): global world, space, contacts world = OdeWorld() world.setGravity(0, 0, -20) wo

37、rld.initSurfaceTable(1) world.setSurfaceEntry(0, 0, 200, 0.1, 0.5, 0.9, 0.00001, 0.0, 0.002) space = OdeSimpleSpace() space.setAutoCollideWorld(world) contacts = OdeJointGroup()space.setAutoCollideJointGroup(contacts)OdeWorld是建立虚拟世界的基础,是第一个需要被实例化的类;通过它,我们可以设置游戏世界的物理规则,例如重力(包括大小和方向), 物体表面的物理性质(包括摩擦系数

38、、刚性等)。OdeSimpleSpace是紧随OdeWorld之后学要被实例化的类;它表示游戏中的虚拟空间;在这个虚拟空间中,物体和物体之间的接触会被检测到。OdeSimpleSpace配合OdeWorld的定义,共同营造出碰撞后的的效果。OdeJointGroup是用来囊括发生的所有物体接触的类,通过它可以获得发生的接触的信息。5.2.2 设置游戏场景以下函数进行游戏场景的设置。def setupGround(): global cm, ground, groundGeom, groundModel, statue cm = CardMaker(Ground) cm.setFrame(-50

39、0, 500, -500, 500) groundModel = cm.generate() groundTexture = loader.loadTexture(Texture/ground.jpg) ground = render.attachNewNode(groundModel) ground.setTexture(groundTexture, 1) ground.setColor(0.2, 0.4, 0.8) ground.lookAt(0, 0, -1) groundGeom = OdePlaneGeom(space, Vec4(0, 0, 1, -1) statue = load

40、er.loadModel(Model/Statue.dae) stP = render.attachNewNode(Statue) statue.instanceTo(stP) statue.setScale(10) stP.setPos(100, 500, 5)stP.setHpr(-90, 0, 0)对于地面模型,因为是简单的矩形3D平面,所以不必通过载入任何外部模型,而是通过Panda3D生成一个简单的3D平面几何体;CardMaker就是这样一个进行几何体生成的API;当一切必要属性(包括平面的size)设计好后,通过调用CardMaker的generate方法就能生成一个3D平面模型

41、,并返回一个Model Node;然后为地面建立一个OdePlameGeom对象;所有的OdeGeom都必须附属于一个OdeSpace,才能被视为存在的且可触碰的物体,并参与碰撞监测。由于地面可以被抽象为不受任何外力影响,所以不必为地面建立OdeBody。在地面建立好后,再载入一个外部模型作为场景装饰,布置在合理的位置上。下图5.1为游戏中的场景效果。图5.1 Artillery Fire的场景效果5.2.3 设置抛射物以下函数进行火炮的抛射物(即炮弹)的初始设置。def setProjectile(): global world, space, ground, ball, ballBody,

42、 ballM, ballGeom, bp ball = loader.loadModel(Model/smiley.egg.pz) bp = render.attachNewNode(Ball) bp.setPos(0, 0, 1) ball.instanceTo(bp) ball.setScale(0.5) ballBody = OdeBody(world) ballM = OdeMass() ballM.setSphereTotal(50, 0.5) ballBody.setMass(ballM) ballGeom = OdeSphereGeom(space, 0.5) ballGeom.

43、setBody(ballBody) ballBody.setPosition(cannonP.getPos()0, cannonP.getPos()1 + 1.0, cannonP.getPos()2 - 0.5) ball.setPosQuat(ballBody.getPosition(), Quat(ballBody.getQuaternion() ballBody.disable()ball.hide()火炮的抛射物为球体,应此采用的视觉效果模型为球体的“Smiley”;同时为火炮抛射物建立OdeSphereBody,设置球体形态的质量分布和总质量;然后后为火炮抛射物建立OdeSpher

44、eGeom,设置球体形态的几何体,用于参与space中的自由碰撞。最后,仔细调整抛射物的位置、大小等属性。在下图5.2中可以看到火炮cannon发射的抛射物projectile。图5.2 从cannon中发射出的一枚projectile5.2.4 设置目标以下函数进行目标的初始化设置。def addTarget(x, y, z): global targets, targetNPs, targetBodies, targetGeoms, targetPos, world, space target = loader.loadModel(Model/frowney.egg.pz) tp = re

45、nder.attachNewNode(Target) tp.setPos(0, 0, 1) target.instanceTo(tp) target.setScale(1.2) targetBody = OdeBody(world) targetM = OdeMass() targetM.setSphereTotal(10, 1.2) targetBody.setMass(targetM) targetGeom = OdeSphereGeom(space, 1.2) targetGeom.setBody(targetBody) targetBody.setPosition(x, y, z) t

46、arget.setPosQuat(targetBody.getPosition(), Quat(targetBody.getQuaternion() targets.append(target) targetNPs.append(tp) targetBodies.append(targetBody) targetGeoms.append(targetGeom)targetPos.append(x, y, z)目标初始化设置的基本构成与抛射物一致,但是因为每个关卡中有一个或多个目标,所以应将目标的各个相关实例集中保存;这里采用list列表对目标的各个相关实例进行管理。下图5.3中,可以看到目标为蓝色的小球Frowney。图5.3 目标Frowney处在砖墙上5.2.5 设置障碍物墙下面这个函数进行单面障碍物墙的设置。由不同宽高的障碍物墙形成关卡中的各种各样的障碍物建筑。def setBoxPile(layout, width, height, x, y): global

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服