安装Pygame
你可以从www.pygame.org下载Pygame,选择合适你的操作系统和合适的版本,然后安装就可以了(什么,你连Python都没有?您可能是不适合看这个系列了,不过如果执意要学,很好!快去www.python.org下载吧!)。 一旦你安装好,你可以用下面的方法确认下有没有安装成功:
Python
>>> import 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来测试一下。
Python
新的Hello World
#!/usr/bin/env pythonbackground_image_filename = 'sushiplate.jpg'mouse_image_filename = 'fugu.png'#指定图像文件名称import pygame#导入pygame库from pygame.locals import *#导入一些常用的函数和常量from sys import exit#向sys模块借一个exit函数用来退出程序pygame.init()#初始化pygame,为使用硬件做准备screen = pygame.display.set_mode((640, 480), 0, 32)#创建了一个窗口pygame.display.set_caption("Hello, World!")#设置窗口标题background = pygame.image.load(background_image_filename).convert()mouse_cursor = pygame.image.load(mouse_image_filename).convert_alpha()#加载并转换图像while True:#游戏主循环for event in pygame.event.get():if event.type == QUIT:#接收到退出事件后退出程序exit()screen.blit(background, (0,0))#将背景图画上去x, y = pygame.mouse.get_pos()#获得鼠标位置x-= mouse_cursor.get_width() / 2y-= mouse_cursor.get_height() / 2#计算光标的左上角位置screen.blit(mouse_cursor, (x, y))#把光标画上去pygame.display.update()#刷新一下画面
为了达到最佳效果,背景的 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程序的印象,接下来我们会学习更多深层次的东西,并且把各条语句都真正读懂。
本次使用的两张图片资源:
光标:fugu.png
参考 http://eyehere.net/2011/python-pygame-novice-professional-2/