文章目录
关于pygame的安装,需要python 3.6.1或更高版本。我这里是centos7环境,我选择了最省事的方法:yum安装epel源,然后yum install python36-pygame。
简单示例
理解新库的最佳方法是直接跳入示例。使用代码创建一个弹跳球动画:
import sys, pygame
pygame.init()
size = width, height = 320, 240
speed = [2, 2]
black = 0, 0, 0
screen = pygame.display.set_mode(size)
ball = pygame.image.load("intro_ball.gif")
ballrect = ball.get_rect()
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
ballrect = ballrect.move(speed)
if ballrect.left < 0 or ballrect.right > width:
speed[0] = -speed[0]
if ballrect.top < 0 or ballrect.bottom > height:
speed[1] = -speed[1]
screen.fill(black)
screen.blit(ball, ballrect)
pygame.display.flip()
将代码保存到game.py,使用命令
wget https://www.pygame.org/docs/_images/intro_ball.gif
将弹跳球图片下载到game.py相同目录。
运行game.py文件,即可在GUI界面看到疯狂跳动的弹跳球了。
分析代码,首先,是导入和初始化pygame。import pygame 导入包,包内包含所有可用的pygame模块。pygame.init()调用负责激活每个模块。
在第8行,我们调用pygame.display.set_mode()创建了一个图形窗口。Pygame和SDL通过默认使用图形硬件的最佳图形模式来简化此过程。您可以覆盖此模式,SDL将补偿硬件无法执行的任何操作。Pygame将图像表示为Surface对象。display.set_mode()函数创建一个新的Surface对象,该对象代表实际显示的图形。您对此Surface所做的任何绘图都将在显示器上显示。
在第10行,我们加载了球的图像。Pygame通过SDL_image库支持多种图像格式,包括BMP,JPG,PNG,TGA和GIF。pygame.image.load()函数返回带有球数据的Surface。Surface将保留文件中的所有颜色键或alpha透明度。加载球图像后,我们创建一个名为ballrect的变量。Pygame附带了一个方便的实用程序对象类型Rect,它表示一个矩形区域。稍后,在代码的动画部分,我们将看到Rect对象可以做什么。
此时,第13行,我们的程序已初始化并准备运行。在无限循环中,我们检查用户输入,移动球,然后绘制球。如果您熟悉GUI编程,那么您就具有处理事件和事件循环的经验。在pygame中这没什么不同,我们检查是否发生了QUIT事件。如果是,我们简单的退出程序,pygame将确保一切正常关闭。
是时候更新我们的位置了。第17行按当前速度移动ballrect变量。如果球已移动到屏幕外,则第18行到第21行将速度反转。虽然不遵守牛顿物理学,但这是我们所需要的。
在第23行,我们用黑色RGB填充屏幕来擦除屏幕。如果你从未使用过动画,这可能看起来很奇怪。你可能会问“为什么我们需要删除任何东西,为什么我们不移动屏幕上的球?”这不是电脑动画的工作方式。动画只不过是一系列单一的图像,当按顺序显示时,可以很好地愚弄人眼,使其看到运动。屏幕只是用户看到的单个图像。如果我们不花时间把球从屏幕上抹去,我们会看到球的“轨迹”,因为我们不断地把球拉到新的位置。
在第24行,我们将球的图像绘制到屏幕上。Surface.blit() 方法处理图像的绘制。blit意味着将像素颜色从一个图像复制到另一个图像。我们给blit方法传递一个要从中复制的源Surface,以及一个将源放置到目标上的位置。
我们要做的最后一件事实际上是更新可见显示。Pygame使用双缓冲区管理显示。绘制完成后,我们调用 pygame.display.flip() 方法。这使得我们在屏幕Surface绘制的所有内容都变得可见。这种缓冲确保了在屏幕上我们只能看到完全绘制的帧。没有它,用户将在创建时看到屏幕的半成品部分。
这个简短的pygame介绍到此结束。Pygame还有一些模块可以完成键盘、鼠标和操纵杆的输入处理等任务。它可以混合音频和解码流媒体音乐。使用这些Surface,您可以绘制简单的形状、旋转和缩放图片,甚至可以实时操作图像的像素作为numpy数组。Pygame还可以充当PyOpenGL的跨平台显示层。大部分pygame模块都是用C编写的,很少真正用Python完成。
pygame网站为每个pygame功能提供了完整的参考文档,并为所有用户提供了教程。pygame源附带了许多例子,例如monkey punching和UFO射击。
Pygame模块概述
cdrom | 回放 |
---|---|
cursors | 加载光标图像,包括标准光标 |
display | 控制显示窗口或屏幕 |
draw | 在表面上绘制简单的形状 |
event | 管理事件和事件队列 |
font | 创建和渲染TrueType字体 |
image | 保存和加载图像 |
joystick | 管理操纵杆设备 |
key | 管理键盘 |
mouse | 管理鼠标 |
sndarray | 用numpy操作声音 |
surfarray | 用numpy处理图像 |
time | 控制时序 |
transform | 缩放,旋转和翻转图像 |
参考文档
https://www.pygame.org/docs/tut/PygameIntro.html