首页 » 与孩子一起学编程 » 与孩子一起学编程全文在线阅读

《与孩子一起学编程》16.5 图像

关灯直达底部

在屏幕上画形状、线和单个像素只是制作图形的一种方式。有时我们还想用从别处得来的图片、可能是数码照片、从网上下载的图片或者在图像编辑程序中创建的图片。在 Pygame 中,使用图像最简单的方法就是利用 image 函数。

下面来看一个例子。我们要显示一个图像,如果你用本书的安装程序安装了 Python,这个图像已经在你的硬盘上了。安装程序会在 /examples 文件夹中创建一个 images 子文件夹,这个程序中要使用的文件是 beach_ball.png。所以,如果你的系统是 Windows,你会在这里找到这个文件:

c:/Program Files/helloworld/examples/images/beach_ball.png。

如果没有使用这本书的安装程序, 可以从本书网站(www.helloworldbook.com) 下载beach_ball.png。

完成这些例子时,需要把 beach_ball.png 文件复制到保存 Python 程序的同一位置上。这样一来,程序运行时 Python 就能很容易地找到这个文件。把 beach_ball.png 文件放在正确的位置上后,键入代码清单 16-11 中的程序,试着运行这个程序。

代码清单 16-11 在 Pygame 窗口中显示沙滩球图像

运行这个程序时,会看到一个沙滩 球的图像显示在 Pygame 窗口的左上角附近,如右图所示。

代码清单 16-11 中,只有第 5 行和第 6 行代码是新加的代码。所有其他代码都在代码清单 16-4 到代码清单 16-10 中见过。我们把先前例子中的 draw 代码替换为从硬盘加载图像并显示图像的代码。

第 5 行中,pygame.image.load 函数从硬盘加载一个图像,并创建一个名为 my_ball 的对象。my_ball 对象是一个表面(前面讨论过表面)。不过我们看不到这个表面,它只在内存中。我们唯一能看到的表面是显示表面,名为 screen(这在第 3 行创建)。第 6 行把 my_ball 表面复制到 screen 表面上。然后像前面一样,通过 display.flip 调用使它可见。

没关系的,Carter。很快我们就可以移动这个球了!

你可能已经注意到代码清单 16-11 第 6 行有一个看上去很有趣的东西:screen.blitblit 是什么意思?请从“术语箱”找出答案。

在 Pygame 中,我们将像素从一个表面复制或块移到另一个表面,这里就是将像素从 my_ball 表面复制到 screen 表面。

术语箱
完成图形编程时,将像素从一个地方复制到另一个地方是很常见的(比如从变量复制到屏幕,或者从一个表面复制到另一个表面)。像素复制在编程中有一个特殊的名字,叫做块移(blitting)。我们说将一个图像(或图像的一部分,或者只是一些像素)从一个地方“块移”到另一个地方。这只是“复制”的一种有趣的说法,不过看到“块移”时,你就会知道复制的是像素而不是其他内容。

在代码清单 16-11 的第 6 行,我们把沙滩球图像块移到位置 50, 50,这表示距窗口左边界 50 像素,距上边界 50 像素。处理 surfacerect 时,这会设置图像左上角的位置。所以沙滩球的左边距离窗口左边界有 50 像素,沙滩球的顶边距离窗口上边界也是 50 像素。