版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、word齐 齐 哈 尔 大 学 毕业设计论文题 目 基于Python的Pygame框架研究 学 院 计算机与控制工程学院 专业班级 计本111 学生姓名 王攀拓 指导教师 赵鑫 成 绩 2022 年 06 月 19 日.word摘 要该论文论述了Python语言中Pygame库的框架结构和一些常用的该库的API,使用Pygame库进行2D游戏开发时需要注意的事项,以及进行2D游戏开发的常用技巧,站在开发者的角度,理论系统的讲解了Pygame游戏开发中的使开发技巧。本论文旨在帮助入门级Pygame游戏开发者能够快速的适应和熟悉该框架的开发标准,能够迅速的使用Pygame框架进行相应的游戏开发。
2、这个Pygame框架是一个对所有程序员开放的Python库。Pygame作为Python语言的扩展,它的所有书写标准都完全按照Python的语法规那么来进行设计和开发。而作为一个开放的语言库,意味着开发者能够更多的看到底层代码的运行原理,甚至修改底层代码从而对开发者自身的程序进行优化,当然着所有都得建立在开发者熟悉Python语言的根底上。本论文站在理论的高度对Python下的Pygame框架进行了全面详细的介绍和说明,还有更进一步游戏开放方面的技术指导,作为Python入门级的介绍,本论文足以满足Pygame初学者的学习需求。关键字:Pygame;框架;游戏开发;源代码开放AbstractT
3、his paper discusses the framework Pygame Python language library and the library some common API, matters need attention when using Pygame library 2D game development, as well as common 2D game development skills, developer's perspective is standed , system theory to explain the Pygame game deve
4、lopment make development skills. This paper aims to help entry-level Pygame game developers to quickly adapt and become familiar with development specifications of the framework can quickly use Pygame game development framework accordingly.The framework is running under the Python language an opened
5、 source runtime. Pygame Python as an extension language, it's all written specifications are fully in accordance with the rules of grammar Python to carry out design and development. The library as an opened language, meaning that developers can see more of the operating principle underlying cod
6、e, or even modify the underlying code so developers optimize their programs, of course, with all the familiar developer had to build in language Python basis.In this paper, at the height of the theoretical framework for Python Pygame under a comprehensive detailed introduction and description of the
7、 game as well as a further opening up of technical guidance, as Python entry-level introduction, this paper is sufficient to meet the learning needs of beginners Pygame .Key words:Pygame;Frame;Game Development; Open source.word目录摘 要IAbstractII第1章 绪论111 课题研发的目的与意义112 可行性分析213 国内外研究现状3第2章 Pygame根底42.1
8、 Pygame来自Python42.2 Pygame环境的要求52.3 Python语法简介52.4 Pycharm简介62.6 Pygame环境搭建6第3章 Pygame模块93.1 Pygame文件结构93.2 事件103.2.1 事件机制103.2.2 事件处理函数103.2.3 鼠标事件处理113.2.4 键盘事件处理123.2.5 事件过滤123.3 图像123.3.1 色彩像素123.3.2 图片处理133.3.3 动画处理133.4 声音143.5 动作163.5.1 精灵163.5.2 向量173.5.3 碰撞检测183.6 控制183.6.1 键盘控制183.6.2 鼠标控制
9、183.7 游戏地图19第4章 Pygame进阶204.1 AI智能204.1.1 状态机204.1.2 AI设计214.2 游戏优化21第5章 Pygame开发思路235.1 设计游戏235.2 开发进程235.3 开发思路24结 论25参考文献26致 谢27.word第1章 绪论电子游戏自上个世纪诞生以来,以着不可思议的速度开展着,从最初的按钮丢硬币简单的游戏到如今的模拟的视频游戏,电子游戏从最初的纯娱乐产品到现在的游戏行业,他的生命力越发的旺盛和持久,甚至游戏行业可以在美国经济萧条的时候力挽狂澜而成为主要产业。诚然,所有的游戏开发都离不开游戏开发人员的辛勤耕耘,而支撑这些繁荣景象的正式一
10、行行的程序代码,优秀的代码才能生产出令人满意的游戏。但是作为世界级的前端技术,由于技术的封闭,程序开发始终只能是少数高端技术员的天下,在保护技术不扩散的同时,也大大的限制了程序开发的创新和开展,毕竟智慧藏于群众。而Python语言的出现,正是有力的打破了程序开发的技术壁垒,开源的程序语言为更多的工程开发提供了更多的语言选择,而开源语言的有点也在这表达,各种方便的接口API和别人书写好的库源代码更好的方便了开发人员的技术选择,从而加快了开发人员的开发进度,而所有的这一切正是与当今要求速度的市场需求不谋而合。作为开源语言的领军人物,Python语言正以着势不可挡的势头冲破并领军整个IT开发行业。P
11、ygame是Python下的一个开源游戏框架,继承了Python开源、快速的优点,还增加了更多的游戏开发的API,使得2D游戏开发进度大大的加快。11 课题研发的目的与意义告诉的经济开展给我们带来的不仅仅是生活水平的提高,增加的生活压力使得人们在日常上班之余需要更多的娱乐工程来放松自己。无论是传统的效劳行业还是新兴的娱乐行业都是旨在为群众提供一种消遣时间放松自己的方式,而电子游戏的出现更是给传统的消费市场注入了一种前所未有的新鲜活力。从简单的按钮游戏到模拟逼真的视频游戏,不断提高的游戏开发技术给人们带来了越来越丰富的游戏体验。但是,随着移动设备的增加和人们加快的生活节奏,“小轻快的移动端游戏席
12、卷了整个游戏市场,例如 疯狂的小鸟 、 飞机大战 等上手速度快、画面精美的2D游戏引来不少玩家的疯狂追捧。伴随着玩家需求的迅速变化以及游戏市场的时间效应,游戏的开发周期和开发效率成为众多游戏开发者的热枕对象。Python语言作为一种开源的非编译语言,强大的可扩展性以及简单的语法结构迅速的走入了游戏开发者的视野。而Python下的Pygame开源库就是这样一个能够承载游戏开发程序员开发效率的这样一个开源的可扩展的库。作为一个开源的游戏开发库,Pygame为游戏开.word发工作者提供了很多方便的接口API,借助这些API大大的缩短了开发周期,减少了游戏的研发本钱。手游搜索量百度搜索量如下列图所示
13、:图1-1 手游搜索量作为新兴的Python开源语言,Python近四年的百度搜索量如下列图所示:图1-2 python搜索量12 可行性分析Python是一门开源的语言,其对平台的支持性表现的较为出色,目前市面上流行的windows系列、MAC系列甚至移动设备的Android系统都提供良好的平台支持。所以对游戏开发者而言,选择Python语言来开发游戏源代码就不用考虑程序代码不同平台的兼容性。Pygame作为Python下的开源库,不仅良好的继承Python特有的语言优势,诸如语法简单、数据类型强大、API操作简单、面向对象的编码方式云云,还增加了自己特有的框架优势,提供的像pygame.c
14、drom光驱模块能够直接调用设备光驱从而大大减少了程序开发人员代码编写量。当然,Pygame还有很多的特别方便的模块函数来提供相应的技术支持。对于玩家来讲,一个游戏首当其冲的应该是游戏画面是否符合他们的口味,而轻量级的Pygame库对于画面渲染的支持更是绰绰有余,尤其是针对2D游戏开发来讲,Pygame在这个方面表现的甚至比其他语言表现的更加优秀,而这也正是选择Pygame来进行2D游戏开发的最有利的技术支持。总上所述,无论是Pygame库的技术支持,还是对游戏开发效率的考虑,Pygame在2D游戏开发方面都有着无比天然的优势存在,而这些正式本文对于Pygame框架研究的理论和实践动机。13
15、国内外研究现状Python从诞生之初就以其简单的语法、良好的易读性、开放的可扩展性吸引了大批的程序员纷纷学习使用,随之而来的,更多的国外大学机构使用Python来进行计算和授课,甚至许多的知名大学吧Python语言作为程序员入门级别的必学语言。比方说麻省理工学院的计算机科学与编程导论、卡耐基梅隆大学的编程根底都用Python语言讲授,还有很多的科学机构也在采用Python来进行大型的科学计算,众望所归,Python语言在科学计算方面表现的非常优异。Pygame作为Python的优秀的扩展库之一,也吸引了越来越多的开发者使用Pygame来进行游戏开发。随着Python语言的流行,更多的游戏开发者
16、将参加Pygame开发游戏者的大军中。相对于国外对Pygame研究的热火朝天,国内那么显得比拟冷淡,甚至市场上都没有一本完整的介绍Pygame框架的指导书,所有的有关Pygame的资料只能从Pygame的官方网站的文档里来获取,但这些远远不能够满足国内一线游戏开发人员的开发需求。本文立足Pygame的官方文档为技术支持,加上自己对游戏开发的理解,全面而系统的对Pygame框架进行介绍和讲解,从而来填补国内这个方面的就属空白,希望能对更多的游戏开发人员更大的启发。第2章 Pygame根底对于任何的开发游戏而程序员来讲,对开发语言的了解一定要有根本的了解,正所谓兵马未动粮草先行,本章节就简单的介绍
17、一下Pygame相关的开发需求和Pygame的语言根底语法。2.1 Pygame来自PythonPython作为现代编程语言的一种,也是一种面向对象的语言,由于它的非编译性而且更多的是一种解释性语言,可以很好的包装进其他的语言种类,具有这样的性质,我们可以称它为胶水语言。Python俨然成为一种更高层次的通用解释型的语言种类,正是由于这些特征,使得它能够跻身成为目前全世界范围内最受欢送的编程语言之一。即使我们更多的称呼它为脚本语言,但是也是有很多的大型工程采用Python语言来进行架构,比方豆瓣网、Google的后台等等。Python的特点可以归类为已下几个特征:1. 简单易学:Python的
18、关键字较少,结构固定且简单,语法相对简单,很快就能学会。2.可读性强:Python代码定义的更清晰。3.维护简单:Python的源代码维护起来非常方便。4.丰富的标准库:Python的最吸引人的地方就是平台兼容性好,可兼容windows和MAC等平台。5.即时调试:人机的交互是即时展现的,可在控制台输入即执行。6.黏合性好:多种硬件平台的Python接口都相同,硬件黏合性表现优异。7.易于扩展:程序员可以根据需要来添加任意低层次的库。8.良好的数据库支持:目前市面上所有的商业数据库都有Python支持的接口。9.支持GUI编程:GUI编程的良好支持可以一直多种平台。作为一个开源的语言种类,Py
19、thon被全世界的程序员扩展出了各种各样的库,Pygame就是其中之一。Pygame是一种使用SDLSimple DirectMedia Layer编写的游戏库,即使SDL是采用C语言进行编写的,不过他也可以采用C+来进行编写和扩展,正如你所见Pygame就是Python下的一个开源的数据库。随着越来越多的优秀的程序员参加Pygame的开发,Pygame的完善性会越来越好。2.2 Pygame环境的要求Pygame作为Python下的一个开源框架,平台的兼容性非常的好,目前市面上流行的几乎所有的操作系统都有很好的支持,随意对平台要求不是很高。而且,作为一个非编译的语言种类,对开发平台的硬件需求
20、也不会有很大的要求,一般的平台配置就满足开发需求。而本文为方便起见所有的代码都运行在windows7下的平台上,其他操作系统例如MAC系统可以参照windows7系统下的操作来进行环境的配置和搭建。2.3 Python语法简介Python设计之初就是是为了语言代码的可读性高度完美。在语言设计之初就考虑到了这点,语言尽量使用其他种类的语言中常见的单词语法,标点符号也是采用其他语言的标点,这样Python代码结构看起来相当美观。有别于静态语言诸如C语言那样大量的重复性语句,也不会有特殊的语法出现显得代码结构不协调。Python采用缩进的强制性代码书写标准使得所有Python的程序员养成优秀的代码书
21、写习惯。采用缩进规那么的好处就是,使用缩进的位置来控制代码块的退出和进入 ,而不是其他代码用特殊符号例如花括号来控制语句块。Python的控制语句和其他语言根本类似,主要有以下几种:if语句,当条件成立时运行语句块。和if配和使用的有else和elif。for语句,作为最重要的遍历语句,可以使用for语句便利所有的Python数据结构。while语句,当控制条件为true时,代码块中的代码会循环执行。try语句。except,finally配合try语句块使用以此处理程序代码中的异常情况class语句。用于定义类型。def语句。可以进行函数或者类型的自定义。pass语句。慈航代码不执行,以空行
22、执行。assert语句。调试程序时采用此语句来测试运行条件是否满足。with语句。在Python2.6新增的语法语句用来把语句块在一个场景中运行。例如代码块对数据进行加密,退出代码块后即时进行数据解密。yield语句。迭代器时使用,返回值是一个迭代器的元素。就是从Python2.5以来这个语句变成一个运算符。raise语句。制造一个错误。import语句。导入一个模块或包。from import语句。导入包中的某个模块或者导入模块中的某个对象。import as语句。将导入的对象赋值给一个变量。in语句。判断一个对象是否在一个字符串/列表/元组里。Python语言的表达式和C/C+有许多相同之
23、处。区别只是很少的一局部。主要的大局部算术运算符与C/C+类似。加法或者取正、减法或者取负、乘法、除法、整除、乘方、取补、取模的表示方法使用+, -, *, /, /, *, , %表示。>>, <<表示右移和左移。&, |, 表示二进制的AND, OR, XOR运算。比拟两个值时使用>, <,!=, =,>=, <=, 分别表示大于、小于、不等于、等于、大于等于、小于等于。在这些运算符里面,, |, , &, <<, >>必须在整数中使用。Python的逻辑运算使用and、or、not。Python对于字
24、符串的处理那么采用单引号和“双引号来表示字符串。Python更为高级的一点,支持对list数据格式的切割,可以保存完整数据或者一局部数据。对函数的递归、默认参数、可变参数都有很好的支持,但函数的重载并不支持。对象的方法是指绑定到对象的函数。作为动态系统的一种,Python作为一种面向对象的语言支持程序员根据需要进行类型的自定义。2.4 Pycharm简介工欲善其事,必先利其器,Python作为一种开源语言它的IDE编辑器有许许多多,其功能和方便程度也是更有千秋。本文所使用的IDE是Pycharm,它是目前Python界比拟流行的一个IDE编辑器,其界面和eclipse高度相似,所以使用起来也不
25、会有太大的违和感。目前Pycharm已经更新到4.5版本,其高度的稳定性和友好的使用界面使得它更瘦Python开发者的青睐。作为一款IDE,Pycharm完整的具备了普通IDE具有的功能。语法高亮、调试、Project管理、自动完成、智能提示、代码跳转、版本控制、单元测试。当然,PyCharm还为Django提供了许多的功能模块内,同时对Google App Engine也提供了很好的支持,更让程序员们兴奋的是,PyCharm对IronPython也有很好的支持。它的安装和常见的软件安装一样,找到Pycharm官网之后下载相应版本安装,安装过程较为简单,在此就不做赘述。2.6 Pygame环境
26、搭建作为Python下的语言库,安装Pygame之前首先得配置好Python的框架运行环境。Python的安装比拟简单下面就进行介绍。本书所有的程序代码均在win7系统下编写调试,所以仅列出windows系统下的安装方法,其他操作系统的安装方法可参考 s:/ /,再次就不一一赘述。在Windows操作系统上配置Python环境。首先,从Python的官方网站 找对对应的平台版本,注意电脑的操作系统是32位或者64位下载最新的2.7.9版本,地址是这个: :/ /ftp/python/2.7.9/python-2.7.9.msi然后,运
27、行下载的MSI安装包,在选择安装组件的一步时,勾上所有的组件:install-python-windows特别要注意选上pip和Add python.exe to Path,接下来按照提示说明一步一步的安装即可完成安装。Python默认安装到C盘目录下,如有需要请自行调整,控制台输入如下代码即说明Python已经成功安装,输出65+46的和:图2-1安装成功例如ok,安装成功,下面需要配置pip的环境变量,否那么,window系统是不认识pip命令的。下列图是pip的安装路径:图2-3文件路径下面介绍常用的比拟方便的安装方法:第一步:浏览器地址栏输入: s:/raw.github /pypa/
28、pip/master/contrib/get-pip.py,直接翻开了get-pip.py的源代码,可以直接把内容拷贝出来,然后在本地创立get-pip.py第二步:运行cmd值get-pip.py所在目录,运行代码:图2-2安装pip在python中Scripts目录下,将这个目录添加进环境变量中就能完成环境配置!下面运行pip安装python包:C:bak>pip install pygame卸载包:C:bak>pip uninstall pygame第3章 Pygame模块承载游戏的主题就是游戏的各个模块,这些模块正式组成整个游戏程序的骨头和血肉,只有神企鹅的了解各个模块的功
29、能和用法,才能使我们的游戏程序设计更加的得心应手。3.1 Pygame文件结构作为一个完整的框架,Pygame有着自己的一个标准的文件结构,当然你也可以有自己的文件结构,但常用的标准的文件结构可以加快你的开发进程使得更多的时间用在代码的开发和实现上。一个典型的pygame脚本结构如下:run_game.pylib/image/*font/*sound/*sound.pydata/util.pymenu.pygame.py图3-1 文件结构图Pygame的源代码被统一存放在lib目录下,用于声音、图像等相关模块的源代码。至于data就是存放整个游戏的资源文件,例如图像、声音等文件放在这个文件夹里
30、。当然,所有的这些都是为了给一个更好的开发标准,完全可以按照自己的喜好来进行文件的结构设计,本文的所使用的文件结构就以它为模板来进行程序的设计与开发。3.2 事件许多的高级程序的设计语言都支持事件机制,因为模拟现实世界的最重要的特征就是游戏开发者在游戏设计过程中一项重要的任务,更多的事件机制来增加人机交互的亲密度,使得游戏更加的人性化和友好。事件机制就是很好的一例。我们需要事件来来增加我们的游戏友好度。3.2.1 事件机制正如哲学所诉说的那样,世界中最普遍就是事物之间的联系,所有的事物联系在一起才组成了这个现实的世界。无论是个体的状态改变还是移动亦或是某个时间的进展过程中的具体某一个阶段均可以
31、引发一个事件,任何一个事件的产生都会引发另外的事件发生,而这些都会在人的大脑皮层中反响,从而进一步的影响你做出的决策。不管怎么说,所有的反响都会决定我们最终做出一个实质性的决定。下列图例如了反响的流程机制:事件源响应器响应者事件引发通知触发图3-2 事件的流程3.2.2 事件处理函数Pygame中使用处理所有的事件的方法是pygame.event.get(),但这是一个开放的方法,就好比敞开大门允许所有的人随意进出。Pygame在处理这种情况时又给出了pygame.event.wait()方法来控制进出,顾名思义,此方法就是等到一个事件发生后再继续下去,就像限流一样,有门票的一个跟一个才能进入
32、,因为游戏往往是需要动态运作的;而另外一个方法pygame.event.poll()在这个方面做的鼻前两者更好,他会根据现有的事件来返回给程序一个真实的事件,也可以是什么都没有。下表是一个常用事件集:表3-1事件监听函数及功能对应表事件参数事件监听用户按下关闭按钮noneQUITPygame被激活或者隐藏gain, stateATIVEEVENT键盘被按下unicode, key, modKEYDOWN键盘被放开key, modKEYUP鼠标移动pos, rel, buttonsMOUSEMOTION鼠标按下pos, buttonMOUSEBUTTONDOWN鼠标放开pos, buttonMO
33、USEBUTTONUP游戏手柄(Joystick or pad)移动joy, axis, valueJOYAXISMOTION游戏球(Joy ball)移动joy, axis, valueJOYBALLMOTION游戏手柄(Joystick)移动joy, axis, valueJOYHATMOTION游戏手柄按下joy, buttonJOYBUTTONDOWN游戏手柄放开joy, buttonJOYBUTTONUPPygame窗口缩放size, w, hVIDEORESIZEPygame窗口局部公开(expose)noneVIDEOEXPOSE触发了一个用户事件codeUSEREVENT3.2
34、.3 鼠标事件处理MOUSEMOTION监听鼠标移动事件,当检测到鼠标移动时触发此方法,其中有三个参数:buttons 这个参数包含了三个数字的数组,这三个值分别表示右键、左键、中间的键,如果是1就表示按下,反之为0。pos 当然就是鼠标的位置了。rel 表示此时距离上次鼠标发生时间时的像素距离。和MOUSEMOTION类似的,我们还有MOUSEBUTTONDOWN触发鼠标按下事件MOUSEBUTTONUP触发鼠标弹起事件,看名字就明白是什么意思了。更多时候考虑的是鼠标的点击即按下和弹起,所以这个方法并不常用。它们的参数为:button 没有s,看清楚得,表示操作的某一个按键。pos 同上3.
35、2.4 键盘事件处理键盘和游戏手柄的事件比拟类似,为KEYDOWN来处理键盘按下的操作和KEYUP处理键盘弹起的操作,使用方法和鼠标的事件监听完全一样。3.2.5 事件过滤通常来讲大局部的事件并不是我们需要处理的,就像是我们并不欢送所有人的造访,无论处于什么样的原因。所以需要一个方法来帮我们排除掉我们不感兴趣的事件,当然你也可以选择不处理这些事件,但这样的以来就显得不够友好,在Pygame中过滤事件采用pygame.event.set_blocked(KEYDOWN,KEYUP)来设置某个按键的按下和弹起事件不被监听,反之,pygame.event.set_allowed()来设置那些事件是被
36、我们允许的。3.3 图像任何一款电子游戏吸引你去玩的永远是画面做的是否精良,是否符合你的口味,完美的贯彻了“以貌取人的方法。所以更多的游戏开发者把精力都用在了图像的处理上。对于图像的处理Pygame拥有自己单独的一套接口方法。对于图像,Pygame也有自己的分析和理解。3.3.1 色彩像素无论是电脑游戏还是 游戏,都是像图像化靠拢的,尽可能的通过图像的变化来反映游戏的变化,通常来讲游戏开发者的大局部力气都会利用在开发游戏图像上,并以此来提高游戏的画面感,而图像的效果是游戏开发的永恒话题。本节主要讲述图像中最根底的组成元素之像素。针对像素就不得不提到分辨率,尺寸为1280*1024的显示器,他就
37、有1310720个像素快,通常来讲,32位RGB的操作系统,每个像素能够显示出16.7百万种不同的颜色。对于色彩来讲就是简单的由像素的组合排列来实现颜色的各种变化。函数格式color255,255,255,括号中间参数为设置的RGB颜色的数值格式。可以使0255的任意值,0,0,0为黑色,255,255,255为白色。3.3.2 图片处理对于图片的处理共有两种图片的加载和图片的储存。从文件加载源的图像。您可以通过其中一个文件名或者一个Python类文件对象。pygame的会自动判断图像类型例如,GIF或位图,并创立一个从数据的新的外表对象。在某些情况下,将需要知道文件扩展名例如,GIF图像应该
38、以“.gif注意。假设传递的是一个源文件对象,可能会考虑到文件的名字来表示namehint参数。在Pygame中,使用pygame.image.load()来加载图像,只要把文件的名字作为参数传入进去,这个方法返回的就是一个完整的图像接口。同时这个接口靠兼容了所有的图像格式,这就有效的把这些不同给隐藏了起来。作为接口,可以任意的对这个接口对象进行任意的图像操作,例如涂画、剪切、复制等种种。不得不说,屏幕也是一个接口对象,pygame.display.set_mode就返回了屏幕的接口对象。对于个别的不怎么流行的图像格式,例如BMP,至少得是压缩过。作为判断图像格式的方法,pygame.imag
39、e.get_extended()的返回值就可以有效的反响此图片能否被加载。在此建议使用os.path.join()来测试图像的兼容性。Pygame中保存图像的方法是save(Surface,filename),这将为您节省外表无论作为PNG、BMG、TGA亦或是JPG的图像,遇到无法识别的图像格式,那么Pygame默认格式为TGA。包括TGA和BMP在内没有压缩的文件格式,PNG,JPEG保存新的图片。3.3.3 动画处理动画就是有无数的静态图片不停地进行重新加载而产生动的效果,而作为动画,其中重要的参数就是动画的帧,帧就算是动画的最关键的参数,可以理解为单位时间内加载的图片数量,当然帧率越高
40、,产生的动画就越细致,动画的效果更佳充足。Pygame中对于动画的处理也有自己的处理方法。也就是说,我们所设计的动画都是在时间轴上进行运转的,只需要知道上一个画面到现在经历的时间时多少,我们就能决定回执下一幅画是否开始。Pygame.time模块中有一个Clock的接口对象,使得这些变得容易了许多:clock = pygame.time.Clock()time_passed = clock.tick()time_passed = clock.tick(30)代码第一行就是进行Clock初始化,然后就是获得上次使用这个函数的时间以毫秒计时,第三行是控制动画最重要的,就是帧率,把它放到每一个循环当
41、中,tick中的参数就是最大帧率,这样一来,游戏运行的时候不会消耗掉机器的CPU资源。但这仅仅是最大的帧率,用户并不能看到这些数字,更多的时候会出现用户的性能不好,又或者是这个动画本身实现的太过复杂,实际情况下的帧率并不能到达这个帧率,我们需要一种更有效的手段来控制我们的动画效果。解决这个问题的方法就是使用一个叫做精灵sprite的对象来承载动画的主题,通常来讲所有的游戏都会用到这个对象来承载图像本体,这样的话,所有的动画都会照常实现,只是实现的时间会有所不同这就是玩家们所说的游戏的流畅度。3.4 声音作为一种存储数据的格式,声音和图片剧透差不多的性质。所以在对声音的处理方面,Pygame对于
42、声音的处理和图片大致相同。考虑的方面也是两个,一个是声音的加载,一个是声音的存储。下面就是Pygame声音的相应操作。对于声音的处理有以下的几种处理对象:表3-2 Sound对象对应表实现功能方法名声音淡出,可接受一个数字毫秒作为淡出时间fadeout获得音频文件长度,以秒计get_length文件播放次数get_num_channels获取音频的音量0.0 1.0get_volume开始播放,返回一个Channel对象,失败那么返回Noneplay设置音量大小set_volume停止播放stop是播放MP3和OGG格式的音频文件,和图像的加载方法类似,加载音频的方法就是pygame.musi
43、c.load(),然后使用pygame.music.play播放音频文件,这里并不需要类似Music的对象或者类,因为大局部情况下,同一时间上只需要播放一个音频就行。不放的时候就用stop()方法来停止就好了,当然很自然有类似录影机上的pause()和unpause()方法。表3-3 Channels对象对应表功能方法名淡出fadeout如果正在播放,返回trueget_busy获取播放完毕时要做的event,没有那么为Noneget_endevent获取队列中的声音,没有那么为Noneget_queue类似get_volume暂停播放pause类似play将一个Sound对象参加队列,在当前
44、声音播放完毕后播放queue设置播放完毕时要做的eventset_endevent类似set_volume立刻停止播放stop继续播放unpause对于声音的处理不仅仅是用sound来进行简单的加载和播放,在实际的游戏程序开发过程中,我们需要把戏繁多的声音变换来增加游戏的趣味性,比方声音的叠加或者是声音的淡入淡出,声音的详细控制,比方即时的声音的音量控制,或者即时的播放控制等等,这都需要更加高级方便的声音控制接口来进行处理这些来自于声音的资源.当然Pygame库也不例外,它提供了诸多的音乐操作的jiekouAPI,通过这些API不仅可以减少游戏开发者的开发难度,同时这样一来也为游戏开发者能够开
45、发出更加多姿多彩的游戏程序提供了更多的可能性,下表就是Pygame为游戏开发者提供的Music接口API:表3-4 Music对象对应表功能方法名淡出fadeout获取音频播放状态get_endevent获取声音音量get_volume加载一个音乐文件load暂停pause播放play从新开始重新播放rewind设置音频set_endevent设置声音大小set_volume立刻停止播放stop继续播放unpause获得当前播放的位置,毫秒计get_pos3.5 动作对一个游戏来讲,所有物体都要进行运动,无论是敌人还是玩家所控制的主角都需要在整个游戏世界的地图进行移动,而这些移动就是Pygam
46、e需要处理的元素的动作。动作的组成两局部,一个是动作的本体也就是谁在运动,还有一个就是做什么动作,无论是直线、斜线甚至翻转都是包括在动作之中,Pygame对于动作的处理给出了很好的接口支持。3.5.1 精灵首先得认识到动作的本体,在游戏中,精灵就是作为本体出现,他更多的是一张图片,也可以是Pygame绘制的一个图形,甚至是一个点。精灵(sprite)就是上面所说的动作的本体,既然是所有的游戏必须的,sprite就作为Pygame中一个公共的类,而他其中的常用方法也有很多。对于游戏来讲,sprite也是游戏开发所特有的一个类,我们首先对sprite这类进行研究。Pygame中sprite类有很多
47、的处理方法来满足开发者的开发需求。是Pygame库中的一个根本的类,所以在使用类的时候只需要继承这个类就行。Sprite只要包括了以下几个变量:Self.image负责显示的内容。例如:self.image=pygame.Surface(x,y)显示一个大小为XY的矩形,self.image=pygame.image.load(filename)通过加载一张文件名为filename的图片来表示一个界面中的精灵。self.image.fill(color),对图片进行染色。例如:self.image=pygame.Surface(x,y)self.image.fill(255,0,0) ,用RG
48、B的模式对图片进行染色。Self.rect精灵显示位置。通常来讲,第一步self.rect=self.image.get_rect()获取image的大小,第二步设置self.rect设置显示的矩形位置,具体的用self.rect.toplefttopright、bottomleft、bottomright)设置不规那么图形的角的显示位置。除此之外还有来对下上右左进行显示。self.update 判定精灵的动作成功。Sprite.add 添加精灵到group中。Sprite.remove 删除group中的精灵Sprite.kill 删除group中的所有精灵Sprite.alive 判断gr
49、oup中的精灵是否存在上面关于精灵说了很多,但是对于精灵的优点还有很多,prgame.sprite有着碰撞和层的概念在里面。层是为了解决Ggroup的次序问题而引入的,所以精灵的位置并不能确定,真需要的话,可以使用orderupdates或者layerupdates,具体的不在此赘述,因为等到用这两种方法解决的问题,太过深奥并不符合本文的创作初衷。3.5.2 向量向量作为我们高中的数学知识,相信大家都很熟悉。而之所作为Pygame中的处理动作的根底标记,是因为在2D游戏开发中,游戏世界中物体的位置确定主要有像个参数决定,横向位置X和纵向位置Y,而向量的表示刚好符合这一点X,Y,这样一个向量数组
50、就完整准确的描述了游戏画面中的物体位置。至于对物体位置的改变,只要改X,Y参数的变化,就能实现对游戏世界中物体的位置进行操作。3.5.3 碰撞检测游戏世界中最重要的一项功能就是物体的碰撞,以此来检测产生相应的时间从而使得游戏的可玩性更加的丰富和有趣。同时碰撞检测也是游戏中不可防止的现象处理。对于碰撞的检测,有很多种方法。具体的可以想象,任何的精灵模块发生碰撞的话,必定会有模块的线段相交。那么只需要判断线段是否相交来判断模块是否相撞。如果有就可以完全return true。上节讲到的向量就是为了处理本节的碰撞检测,像素级别的碰撞检测就是对相同向量位置上的精灵进行判定,如果重叠那么为碰撞反之没有碰
51、撞。在Pygame中就是计算(X,Y)的值来判断精灵的种类。3.6 控制对于所有的游戏来讲,鼠标和键盘是游戏的主要输入设备。键盘是用来控制方向和大局部的动作操作,鼠标那么控制位置从而丰富了操作的数量和游戏体验。当然,相比拟游戏手柄而言,键盘和鼠标并不是为了游戏而设计专门的。3.6.1 键盘控制在本文的前几章中有提到过键盘的事件监听,同样的翻译成控制的话就是通过键盘来控制,当pygame.event.get()获得所有的事件,当返回值是KEYDOWN时,这个方法就会判断按下的键的种类。这里提一下pygame的pygame.key.get_pressed()是用来获取所有的按键的键值,进而返回一个
52、包含所有键值的元祖,元祖的值就是对应键就是按键按下与否。3.6.2 鼠标控制对于鼠标来讲,主要有两个控制游戏的因素,其中一个是鼠标停留的位置,可以使用pygame.mouse.get_pos可获得,一个是鼠标的按键操作,这个键盘类似。当然我们可以用鼠标来控制方向,比方说在3D游戏中视角的切换可以通过鼠标来控制。注意,在这个时候我们不能获取鼠标的位置来控制视角的切换,因为鼠标可能移出有效窗口的外部,不过我们可以比照此时鼠标相对上一帧的位移量来对视角进行控制。更多的时候键盘和鼠标是结合起来一起用的,这样的组合会产生更多的操作可能,也能更好的控制游戏,增强游戏体验。3.7 游戏地图大局部的游戏类型中
53、,游戏地图都是主要的组成局部,所以优秀的地图就需要重点来设计, 更直白的说,地图就是有一个二维数组组成的,需要做的就是快速的吧二维数组显示到游戏主屏幕上。假设自己设计的游戏地图不是特别的大,这时候就可以把完整的整个的地图 画在一张图上,反之,如果游戏的地图非常的大,一个画面并不能展现出来,那么地图的绘制和显示就会显得非常困难,这时候另外一项技术就有用武之地了,图块(Tile)。所谓Tile,是一种将地图中公共的图像元素单独的提取出来,而完整的地图就是以上的这些图块拿组成的,这样一来,我们绘制地图的任务量就大大的减少了,只需要把地图分割成一个个小块,然后将地图上对应的图像内容填充到相应
54、的地图块中。之前将sprite的时候,讲到为了实现动画的效果,我们把每一张图片进行编号,然后在需要的时候对相应的编号进行一次的播放以此来实现动画的效果,同样的道理在实现地图的时候我们也可以这样实现,甚至某种意义上讲地图也是动画的一种只是它是在读地图的时候进行图片加载。我们把每一个图块进行编号,然后在需要载入地图的时候现在入地图格子,也就是一个以二维数组保存的地图信息,最后在每一个格子上面加载我们需要的地图图块从而实现地图的加载。第4章 Pygame进阶以上三个章节是把所有关于Pygame的根底框架知识进行的大概的描述,一般的简单的游戏功能都能够实现,换句话说能够满足一般的游戏设计者的需求。但是
55、对于更深层次或者更高级具有更高级玩法的游戏设计上面的框架远远不能够满足设计者的需求。人机交互和更优的游戏体验才能使得游戏更加的吸引玩家的长久注意力,而这两项也是那些著名的欧系能够经久不衰的原因。4.1 AI智能游戏需要的更多的是人机的交互,而这些都需要一项技术来进行相应的技术支持,那就是AI智能的引入。这里的AI智能并不是真正的智能机器人的那种意思,只是增加了更多的人机交互的时机提供了更好的人机交互的体验。4.1.1 状态机在之前的章节我们提到过状态机的相关知识,这节为了更好的了解它,我们首先要知道什么是状态机。有限状态机的定义又称有限状态自动机,用来表示几个状态和状态相应的转换关系的数学模型
56、,下列图就是上章节提到的敌人的状态机:玩家消失搜索怪守地图攻击驱逐玩家发现玩家图4-1 状态机状态机主要就是在描述两个问题,一个是我现在正在做什么,下一步我要做什么。而促使这两个状态进行转化的条件就是状态机运行的动力之源,包括状态机的载入和退出。正式不同状态的之间的动态相互转换组成了状态机的根本运行机制。4.1.2 AI设计诚然,我们设计AI的初衷并不是为了可以再系统上进行作弊的敌人来破坏游戏的平衡性,相反而是说这样一个作弊的敌人可以满足玩家对游戏的挑战性需求 。但是,过于强大的AI会适得其反。相比拟大局部的游戏开发者来讲,他们就是为了设计出一个更加完美的计算机对手可以与我们人类进行抗衡,注意是抗衡而不是来压制玩家。这样做的结果就是很多的游
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025届辽宁省葫芦岛语文高三第一学期期末达标检测模拟试题含解析
- 湖北省黄冈八模系列2025届数学高二上期末学业水平测试试题含解析
- 2025届甘肃省民勤县第三中学语文高三上期末教学质量检测试题含解析
- 吉林省吉林市第一中学2025届生物高二上期末监测模拟试题含解析
- 2025届广东省茂名市五校联考高二上数学期末复习检测试题含解析
- 2025届湖北省黄岗市浠水实验高中生物高三上期末调研试题含解析
- 2025届四川省生物高一上期末调研模拟试题含解析
- 内蒙古2025届高三语文第一学期期末复习检测试题含解析
- 2025届江苏省南京市梅山高级中学数学高三上期末监测模拟试题含解析
- 2025届浙江省衢州五校数学高一上期末综合测试模拟试题含解析
- GB/T 588-2009船用法兰青铜截止止回阀
- GB/T 5780-2016六角头螺栓C级
- GB/T 31997-2015风力发电场项目建设工程验收规程
- 反歧视虐待、骚扰控制程序A
- GA/T 383-2014法庭科学DNA实验室检验规范
- 新概念英语第一册L121-L126考试卷试题
- 高压电工复审培训课件
- 大数据和人工智能知识考试题库600题(含答案)
- 计划的组织实施演示
- 中央企业全面风险管理指引总则课件
- 普及人民代表大会制度知识竞赛试题库(1000题和答案)
评论
0/150
提交评论