如何移动图像?
许多刚接触编程和图形的人都不知道如何让图像在屏幕上移动。如果不理解所有的概念,可能会非常混乱。你不是第一个被困在这里的人,我会尽力一步一步来。我们甚至会尝试以保持你的动画高效的方法结束。
请注意,在本文中我们不会教您使用python编程,只是向您介绍一些使用pygame的基础知识。
只是屏幕上的像素
Pygame有一个显示Surface。这基本上是一个在屏幕上可见的图像,图像由像素组成。改变这些像素的主要方法是调用blit()函数。这将像素从一个图像复制到另一个图像。
这是要理解的第一件事。当你在屏幕上分割图像时,你只是改变了屏幕上像素的颜色。像素不会被添加或移动,我们只是改变屏幕上像素的颜色。在pygame中,你将这些图像位到屏幕上也是Surface,但它们没有连接到显示Surface。当它们被传送到屏幕上时,它们被复制到显示器上,但你仍然拥有原始文件的唯一副本。
用这个简单的描述。也许您已经理解了“移动”图像需要什么。我们实际上没有移动任何东西。我们简单地把图像分割到一个新位置。但是在我们在新位置绘制图像之前,我们需要“擦除”旧的图像。否则,图像将在屏幕上的两个地方可见。通过快速擦除图像并在一个新的地方重新绘制,我们实现了运动的“错觉”。
在本教程的其余部分中,我们将把这个过程分解为更简单的步骤。甚至解释了让多个图像在屏幕上移动的最佳方法。你可能已经有问题了。比如,在把图像绘制到一个新位置之前,我们如何“擦除”图像?也许你还是完全迷路了?希望本教程的其余部分可以为您澄清这些问题。
让我们后退一步
也许像素和图像的概念对你来说还是有点陌生?好的,好消息是,在接下来的几节中,我们将使用代码来做我们想做的一切,它只是不使用像素。我们将创建一个由6个数字组成的小python列表,想象它代表一些我们可以在屏幕上看到的奇妙图形。这可能会让人惊讶,它与我们稍后将用真实图形所做的非常接近。
让我们从创建屏幕列表开始,用1s和2s的美丽风景填充它。
screen = [1, 1, 2, 2, 2, 1]
print screen
[1, 1, 2, 2, 2, 1]
现在我们已经创建了背景。除非我们在屏幕上也画出一个玩家,否则不会让人很兴奋。我们将创造一个看起来像数字8的强大英雄。让我们把他放在地图的中间,看看会是什么样子。
screen[3] = 8
print screen
[1, 1, 2, 8, 2, 1]
如果您使用pygame进行一些图形编程,那么这可能是您所得到的最多的内容。屏幕上有一些好看的东西,但它不能移动。也许现在我们的屏幕只是一个数字列表,更容易看到如何移动他?
英雄出击
在我们开始移动角色之前。我们需要追踪他的位置。在上一节我们画它的时候,我们随便选了一个位置。这次我们来正式一点。
playerpos = 3
screen[playerpos] = 8
print screen
[1, 1, 2, 8, 2, 1]
现在把他调到一个新的职位很容易。我们只需要改变playerpos的值,并将其再次呈现在屏幕上。
playerpos = playerpos - 1
screen[playerpos] = 8
print screen
[1, 1, 8, 8, 2, 1]
哎呦。现在我们可以看到两个英雄。一个在老位置,一个在新位置。这就是为什么我们需要先“抹去”英雄原来的位置,然后再把他画到新的位置上。要删除他,我们需要将列表中的值修改回英雄出现之前的值。这意味着我们需要在英雄替换它们之前跟踪屏幕上的值。有几种方法可以做到这一点,但最简单的通常是保留一个屏幕背景的单独副本。这意味着我们需要对我们的小游戏做出一些改变。
创建一个背景
我们要做的是创建一个单独的列表,称之为background。我们将创建背景,使它看起来像我们的原始屏幕所做的,1和2。然后我们将把每个项目从背景复制到屏幕上。在那之后,我们终于可以把我们的英雄画回到屏幕上。
background = [1, 1, 2, 2, 2, 1]
screen = [0]