python3.6.4
用到的第三方库:pygame random os PIL
所谓制作动态雪景,就像大家在视频里看到的那样,在一个背景图中,模拟雪花由上到下飘落,我们看看背景图。我们就是在这个背景图上画雪花。然后快速移动位置。
雪花也是一个图片,我们可以动态调节不同位置的雪花的大小,模拟出雪花远近。
模拟过程和普通的游戏帧率变化一样。每间隔一个帧率的时间,让雪花向下方移动一小段。其中,这个雪花也旋转一定的角度。然后刷新一下视频,由于视觉暂留的作用,呈现在我们眼前的就是视频一样的雪景。
首先载入雪花图片和背景图片。
snow_image = pygame.image.load_extended('snow.png')
用pygame里面的image.load_extend()函数载入。同理,背景图片也可以这样处理。
因为不同的雪花速度,大小以及位置都是不同的,所以我们要定义一个雪花的类来表示这些雪花。其中包含有这些参数。
其中先定义一些基本的变量,如雪花的速度,位置,尺寸。例如:self.speed代表这个雪花的速度。在实例化的时候,speed是我们放进去的实参。
def __init__(self, image, pos, speed, size, screen):
super().__init__()
self.screen = screen
self.speed= speed
self.pos = pos
self.image = pygame.transform.scale(image, size)
self.rect = self.image.get_rect()
self.rect.x = pos[0]
self.rect.y = pos[1]
然后,这雪花的类中,我们定义几个重要的函数。比如雪花运动的函数。
def update(self):
self.rect.x += self.speed[0]
self.rect.y += self.speed[1]
# 雪花旋转
self.image = pygame.transform.rotate(self.image, 90)
if self.check_edges():
self.rect.x = self.pos[0]
self.rect.y = self.pos[1]
其中第一部分就是按照雪花的速度,修改雪花的位置,具体来说就是修改雪花的x坐标和y坐标。第二部分就是雪花本身的自我旋转,这同样也是修改了雪花的x坐标和y坐标。
雪花数量很多,我们可以定义一个snow_group = Group(),专门用来存储实例化以后的雪花。在其中添加雪花。
snow_group.add(Snow(snow_image, pos, speed, snow_size, screen))
雪花飘落的控制,实际上用的就是一个while循环。现在screen背景上填充我们的背景图片。
screen.blit(bg, (0, 0))
然后进行雪花的控制,也就是控制雪花的飘落。用到的函数就是下面的函数。
for snow in snow_group.copy():
snow.blitme()
修改雪花的位置后,修改雪花的集合,这样才能正常的产生新的雪花并且添加到groups里面。代码如下
snow_group.update()
这些基本操作完成以后,我们还需要刷新一下界面,只有这样,雪花才能在图片上正常移动。
pygame.display.update()
在while循环的最后,我们需要设置一个时钟,用来控制帧率也就是控制这个while循环的速度,这样雪花就可以平缓飘落。
# 设置fps
clock.tick(30)
if num >= 250:
break
num += 1
最后:
大家可以试试给代码加上背景音乐,看雪景的时候听音乐岂不是更好?
怎么样,会了不?
想了解更多Python知识,或者想要初学者练习资料的,可以加下我下面这个微信~