初次接触 Python 游戏编程,pygame 是必不可少的,下面分享一段代码,可以更直观的了解 pygame:
首先,我们使用“import pygame”导入了Pygame的所有模块,然后调用“pygame.init()”对这些模块进行初始化。
第10行,我们通过“pygame.display.set_mode()”创建了一个图形窗口。Pygame使用Surface对象来表示图像,“display.set_mode()”函数创建了一个新的Surface对象来表示实际显示出的图形(graphics)。在这个Surface上绘制的任何东西,都会在显示器上看到。
第12行,我们加载了球的图片。Pygame支持很多图片格式,包括 JPG、PNG、TGA、GIF。“pygame.image.load()”函数,返回一个包含ball.gif数据的Surface对象(它不会改变原图中的色彩值和透明度)。然后创建了一个Rect类型,名为ballrect的变量。
到了第15行,我们的程序已经初始化完成,准备好运行了。在这个无限循环中,我们检查了用户输入,对球进行移动,然后再把球画出来。GUI程序开发,都是采用事件驱动模型,Pygame也不例外。如果接收到了QUIT事件,就直接调用“sys.exit()”退出,Pygame会确保程序正常关闭(不必担心空指针、内存泄漏之类的问题)。
第20-24行,通过更改ballrect的值来更新球的位置。如果球到了上/下边界,就让它的速度反向。
第26行,我们通过填充黑色(black),对整个屏幕进行了擦除。至于为什么这么做,可以去了解一下动画原理。
第27行,我们画出了球的图像。图像的绘制是由“Surface.blit()”方法处理的。blit的基本含义是,把像素点的颜色值从一个图像拷贝到另一个图像上。我们向这个方法传递了一个用于拷贝的Surface源(ball),以及这些像素点出现在目标图像上的位置(ballrect)。
最后一步是更新程序的显示界面(display)。Pygame用了两个缓冲区(buffer)来管理显示界面。当我们的绘制工作完成之后,调用“pygame.display.flip()”,使得我们在screen这个Surface对象上绘制的内容可见。缓存机制可以确保我们只能看见绘制完成之后的帧,如果没有它的话,在screen的创建过程中,用户会看见绘制到一半的屏幕。
以上完成了对Pygame使用方法的一个简单介绍。Pygame还有很多模块可以做一些有趣的事,比如:
- 处理键盘、鼠标、操纵杆等输入方式。
- 混合音频,对音乐文件解码。
- 通过Surface绘制简单的图形、图片,并对它们进行旋转、缩放操作。甚至通过Python数组,实时操作图片的像素点。
- 支持MPEG视频播放,音频CD播放。
- 作为PyOpenGL的跨平台展示层。(这一点,也许Pyglet做得更好?)
大部分Pygame的模块都是用C写的,极少数用Python实现。Pygame的程序包里带有一些示例程序,如monkey punching和UFO shooting。