本节书摘来自异步社区《Python和Pygame游戏开发指南》一书中的第2章,第2.19节,作者[美]Al Sweigart(斯维加特), 李强 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.19 用pygame.image.load()和blit()绘制图像
如果你想要在屏幕上绘制简单的形状,绘制函数已经很好用了,但是,很多游戏都有图像(也叫作精灵,sprite)。Pygame能够从PNG、JPG、GIF和BMP图像文件中,将图像加载到Surface对象上。这些图像文件格式的区别参见http://invpy.com/formats。
猫的图像存储在一个名为cat.png 的文件中。要加载这个文件的图像,将字符串'cat.png'传递给pygame.image.load()函数。pygame.image.load()函数调用将会返回一个Surface对象,图像已经绘制于其上。这个Surface对象将会是和显示Surface对象不同的另一个Surface对象,因此,我们必须将图像的Surface对象复制到显示Surface对象上。位图复制(Blitting)就是将一个Surface的内容绘制到另一个Surface之上。这通过blit() Surface对象方法来完成。
如果在调用pygame.image.load()的时候得到了一条错误消息,如“pygame. error: Couldn't open cat.png”,那么,在运行程序之前,请确保cat.png文件和catanimation.py位于同一文件夹之中。
动画程序的第39行使用blit()方法把catImg复制到了DISPLAYSURF。blit()方法有两个参数。第一个参数是源Surface对象,这是将要复制到DISPLAYSURF Surface对象上的内容。第2个参数是两个整数的一个元组,这两个整数表示图像应该复制到的位置的左上角的X 和Y 坐标。
如果catx和caty设置为100和200,catImg的宽度为125,高度为79,这个blit()调用将会把该图像复制到DISPLAYSURF上,以使得catImg的左上角的XY 坐标为(100, 200),而其右下角的XY 坐标为(225, 279)。
注意,不能复制当前“锁定”的一个Surface(例如,通过其生成了一个PixelArray对象并且还没有删除该对象)。
游戏循环剩下的部分只是修改catx、caty和direction变量,以使得猫在窗口中移动。还有一个pygame.event.get()调用负责处理QUIT事件。