logo资料库

pygame教程.pdf

第1页 / 共147页
第2页 / 共147页
第3页 / 共147页
第4页 / 共147页
第5页 / 共147页
第6页 / 共147页
第7页 / 共147页
第8页 / 共147页
资料共147页,剩余部分请下载后查看
基础教程-1.pdf
基础教程-2
基础教程-3
基础教程-4
基础教程-5
基础教程-6
基础教程-7
基础教程-8
基础教程-9
基础教程-10
基础教程-11
基础教程-13
基础教程-14
基础教程-15
基础教程-16
基础教程-17
基础教程-18
基础教程-19
基础教程-20
基础教程-21
基础教程-22
基础教程-23
基础教程-24
实践教程-涂鸦画板1
实践教程-涂鸦画板2
实践教程-恶搞俄罗斯方块1
实践教程-恶搞俄罗斯方块2
实践教程-恶搞俄罗斯方块3
实践教程-恶搞俄罗斯方块4
实践教程-植物大战僵尸
用Python和Pygame写游戏-从入门到精通(1) By xishui | 2011/04/11 219 Comments 博客刚开,打算做一个Pygame的系列,翻译自Will McGugan的《Beginning Game Development with Python and Pygame –From Novice to Professional》,有兴趣的朋友可以搜一下,有英文版的 PDF可以下载。其实也不是翻译,把精华摘出来,共同学习。 看这个系列需要有Python的基础知识,虽然一开始想写一篇Python概要的,实在是很庞杂,而且有那 么多好的Python基础教程,自己就不多插一脚了吧。入门的话,有Python入门,详尽的话,可以看看 Python核心编程或者Python编程金典,然后IBM上的“可爱的Python”系列也很不错,可以扩展一下思 维。 OK,让我们开始吧~ Pygame的历史 Pygame是一个利用SDL库的写就的游戏库,SDL呢,全名Simple DirectMedia Layer,是一位叫做 Sam Lantinga的大牛写的,据说他为了让Loki(致力于向Linux上移植Windows的游戏的一家大好人公 司,可惜已经倒闭,唉好人不长命啊……)更有效的工作,创造了这个东东。 SDL是用C写的,不过它也可以使用C++进行开发,当然还有很多其它的语言,Pygame就是Python中 使用它的一个库。Pygame已经存在很多时间了,许多优秀的程序员加入其中,把Pygame做得越来越 好。
安装Pygame 你可以从www.pygame.org下载Pygame,选择合适你的操作系统和合适的版本,然后安装就可以了 (什么,你连Python都没有?您可能是不适合看这个系列了,不过如果执意要学,很好!快去 www.python.org下载吧!)。 一旦你安装好,你可以用下面的方法确认下有没有安装成功: 你的版本可能和我不同,这没关系。我所翻译的这本书上的版本还是1.7.1的……所以如果有些过时的 不合时宜的东西,千万不要客气请指出来! 若说为什么要介绍这么一个“过时”的东西,真正的知识是不会过时的,只有技术才会。这里主要是依靠 Pygame来介绍的游戏开发的方方面面,并不是说咱就可以靠这个做出什么伟大的游戏了(当然也不是 说不可以)! 另外说一下,就产品而言,Pygame更致力于2D游戏的开发,也就是说,你可以用Pygame写一个植物 大战僵尸,但是写一个魔兽世界则相当困难……请不要做出鄙夷的目光,底层的东西永远是相通的, 而且对于新手而言,从简单的2D入手才是正途。 使用Pygame Pygame有很多的模块,下面是一张一览表: 模块名 pygame.cdrom pygame.cursors pygame.display pygame.draw pygame.event pygame.font pygame.image pygame.joystick pygame.key 功能 访问光驱 加载光标 访问显示设备 绘制形状、线和点 管理事件 使用字体 加载和存储图片 使用游戏手柄或者 类似的东西 读取键盘按键
模块名 pygame.mixer pygame.mouse pygame.movie pygame.music 功能 声音 鼠标 播放视频 播放音频 pygame.overlay 访问高级视频叠加 pygame pygame.rect pygame.sndarray pygame.sprite pygame.surface pygame.surfarray pygame.time 就是我们在学的这个东西了…… 管理矩形区域 操作声音数据 操作移动图像 管理图像和屏幕 管理点阵图像数据 管理时间和帧信息 pygame.transform 缩放和移动图像 有些模块可能在某些平台上不存在,你可以用None来测试一下。 新的Hello World 学程序一开始我们总会写一个Hello world程序,但那只是在屏幕上写了两个字,现在我们来点更帅 的!写好以后会是这样的效果:
指定图像文件名称 导入 库 导入一些常用的函数和常量 向 模块借一个 函数用来退出程序 初始化 为使用硬件做准备 创建了一个窗口 设置窗口标题 加载并转换图像 游戏主循环
接收到退出事件后退出程序 将背景图画上去 获得鼠标位置 计算光标的左上角位置 把光标画上去 刷新一下画面 这个程序需要两张图片,你可以在这篇文章最后的地方找到下载地址,虽然你也可以随便找两张。为 了达到最佳效果,背景的 sushiplate.jpg应要有640×480的分辨率,而光标的fugu.png大约应为 80×80,而且要有Alpha通道(如果你不知道这是什么,还是下载吧……)。 注意:代码中的注释我使用的是中文,如果执行报错,可以直接删除。 游戏中我已经为每一行写了注释,另外如果打算学习,强烈建议自己动手输入一遍而不是复制粘贴! 稍微讲解一下比较重要的几个部分: set_mode会返回一个Surface对象,代表了在桌面上出现的那个窗口,三个参数第一个为元祖,代表 分 辨率(必须);第二个是一个标志位,具体意思见下表,如果不用什么特性,就指定0;第三个为色 深。 标志位 功能 FULLSCREEN 创建一个全屏窗口 DOUBLEBUF 创建一个“双缓冲”窗口,建议在HWSURFACE或者OPENGL时使用 HWSURFACE 创建一个硬件加速的窗口,必须和FULLSCREEN同时使用 OPENGL 创建一个OPENGL渲染的窗口 RESIZABLE 创建一个可以改变大小的窗口 NOFRAME 创建一个没有边框的窗口 convert函数是将图像数据都转化为Surface对象,每次加载完图像以后就应该做这件事件(事实上因 为 它太常用了,如果你不写pygame也会帮你做);convert_alpha相比convert,保留了Alpha 通道信 息(可以简单理解为透明的部分),这样我们的光标才可以是不规则的形状。 游戏的主循环是一个无限循环,直到用户跳出。在这个主循环里做的事情就是不停地画背景和更新光 标位置,虽然背景是不动的,我们还是需要每次都画它, 否则鼠标覆盖过的位置就不能恢复正常了。
blit是个重要函数,第一个参数为一个Surface对象,第二个为左上角位置。画完以后一定记得用 update更新一下,否则画面一片漆黑。 这是一个最最大概的Pygame程序的印象,接下来我们会学习更多深层次的东西,并且把各条语句都真 正读懂。 >> 用Python和Pygame写游戏-从入门到精通(2) 本次使用的两张图片资源: 背景:sushiplate.jpg 光标:fugu.png Category: Python 标签: pygame , Python , 游戏开发 219 thoughts on “用Python和Pygame写游戏-从入门到精通(1)” Jame 2011/04/13 Love the new design. I was pleased with the content. Thanks for your excellent blog. xishui 2011/04/14 Post author Oh, the 1st comment on my blog. The first time is always sweet(although it doesn’t look like posted by a people…), thanks and I will do better~ cipki 2011/04/19 You got a really useful blog I have been here reading for about half an hour. I am a newbie and your post is valuable for me.
用Python和Pygame写游戏-从入门到精通(2) By xishui | 2011/04/14 101 Comments 上次我们试着写了一个最简单的Pygame程序并且解释了一个大概的框架,这次就Pygame中也是游戏 中最关键(……好吧,也许并不是最关键,但绝对是至关重要的一项)的事件来展开。 此图为一个用Pygame开发的游戏,或许有些简陋,但是只要你有爱,什么都能出来! 理解事件 事件是什么,其实从名称来看我们就能想到些什么,而且你所想到的基本就是事件的真正意思了。我 们上一个程序,会一直运行下去,直到你关闭窗口而产生了一个QUIT事件,Pygame会接受用户的各 种操作(比如按键盘,移动鼠标等)产生事件。事件随时可能发生,而且量也可能会很大,Pygame的 做法是把一系列的事件存放一个队列里,逐个的处理。
事件检索 上个程序中,使用了pygame.event.get()来处理所有的事件,这好像打开大门让所有的人进入。如果 我们使用pygame.event.wait(),Pygame就会等到发生一个事件才继续下去,就好像你在门的猫眼上 盯着外面一样,来一个放一个……一般游戏中不太实用,因为游戏往往是需要动态运作的;而另外一 个方法pygame.event.poll()就好一些,一旦调用,它会根据现在的情形返回一个真实的事件,或者一 个“什么都没有”。下表是一个常用事件集: 事件 QUIT 产生途径 用户按下关闭按钮 参数 none ATIVEEVENT Pygame被激活或者隐藏 gain, state KEYDOWN KEYUP MOUSEMOTION MOUSEBUTTONDOWN MOUSEBUTTONUP 键盘被按下 键盘被放开 鼠标移动 鼠标按下 鼠标放开 unicode, key, mod key, mod pos, rel, buttons pos, button pos, button JOYAXISMOTION 游戏手柄(Joystick or pad)移动 joy, axis, value JOYBALLMOTION 游戏球(Joy ball)?移动 JOYHATMOTION 游戏手柄(Joystick)?移动 JOYBUTTONDOWN 游戏手柄按下 JOYBUTTONUP 游戏手柄放开 VIDEORESIZE Pygame窗口缩放 VIDEOEXPOSE Pygame窗口部分公开(expose)? USEREVENT 触发了一个用户事件 joy, axis, value joy, axis, value joy, button joy, button size, w, h none code 如果你想把这个表现在就背下来,当然我不会阻止你,但实在不是个好主意,在实际的使用中,自然 而然的就会记住。我们先来写一个可以把所有方法输出的程序,它的结果是这样的。
分享到:
收藏