Pygame概论翻译

##Pygame概论翻译
Python Pygame Introduction
Author: Pete Shinners
Contact: pete@shinners.org
本文是针对Python程序员的pygame库的介绍。最初的版本出现在Py Zine,第1卷第3期。这个版本包含小的修改,以创建一个全面更好的文章。Pygame是一个Python扩展库,它封装了SDL库及其帮助程序。
历史
Pygame开始于2000年夏天。作为一名多年的C程序员,我几乎同时发现了Python和SDL。您已经熟悉了Python 1.5.2版本。您可能需要介绍SDL,即简单的DirectMedia层。SDL由Sam Lantinga创建,是一个用于控制多媒体的跨平台C库,类似于DirectX。它已被用于数百个商业和开源游戏。这两个项目的简洁和简单给我留下了深刻的印象,不久我就意识到混合使用Python和SDL是一个有趣的建议。
我发现一个小项目已经在进行中,它有着完全相同的想法,即PySDL。由Mark Baker创建的PySDL是作为Python扩展的SDL的一个简单实现。它的界面比一般的SWIG包装更干净,但我觉得它强制使用了“C风格”的代码。PySDL的突然消亡促使我着手一个自己的新项目。
我想建立一个真正利用Python优势的项目。我的目标是让简单的事情变得容易,让困难的事情变得简单。Pygame开始于2000年10月。6个月后,pygame 1.0版本发布了。

体验
我发现理解一个新库的最好方法是直接跳到一个示例。在pygame早期,我用7行代码创建了一个弹跳球动画。让我们来看看同样的事情的一个友好版本。这应该足够简单,可以遵循,并有一个完整的分解。

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()

这是一个简单的你可以得到一个弹跳动画。首先,我们看到导入和初始化pygame并没有什么值得注意的。import pygame会导入包含所有可用pygame模块的包。调用pygame.init()初始化这些模块。
在第8行,我们通过调用pygame.display.set_mode()创建了一个图形窗口。Pygame和SDL通过默认为图形硬件提供最佳图形模式,使得这一点很容易实现。您可以覆盖模式,SDL将补偿硬件不能做的任何事情。Pygame将图像表示为表面对象。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方法一个要复制的源Surface,以及一个将源放置到目标上的位置。
我们需要做的最后一件事是更新可见显示。Pygame使用一个双缓冲区来管理显示。当我们完成绘制时,我们调用pygame.display.flip()将完整的显示Surface更新到屏幕方法。这使得我们在屏幕Surface上绘制的所有内容都变得可见。这种缓冲确保我们只能在屏幕上看到完全绘制的帧。如果没有它,用户将在创建时看到屏幕上已完成一半的部分。
这是对pygame的简短介绍。Pygame也有一些模块来处理键盘、鼠标和操纵杆的输入处理。它可以混合音频和解码流媒体音乐。使用surface,您可以绘制简单的形状,旋转和缩放图片,甚至可以实时操作图像的像素作为numpy数组。Pygame还能够充当PyOpenGL的跨平台显示层。大多数pygame模块是用C编写的,很少是用Python完成的。pygame网站为所有范围的用户提供了所有pygame功能的完整参考文档和教程。pygame源提供了许多例子,如猴子拳击和UFO射击。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值