夏天怎么解暑?教你用python画出《雪景》的效果,太好玩了

目录

  • 开发工具
  • 讲解部分
    • 一:动态雪景原理
    • 二:雪花的运动
    • 三:雪花飘落的控制

开发工具

python3.6.4

用到的第三方库:pygame random os PIL

讲解部分

一:动态雪景原理

所谓制作动态雪景,就像大家在视频里看到的那样,在一个背景图中,模拟雪花由上到下飘落,我们看看背景图。我们就是在这个背景图上画雪花。然后快速移动位置。

雪花也是一个图片,我们可以动态调节不同位置的雪花的大小,模拟出雪花远近。

模拟过程和普通的游戏帧率变化一样。每间隔一个帧率的时间,让雪花向下方移动一小段。其中,这个雪花也旋转一定的角度。然后刷新一下视频,由于视觉暂留的作用,呈现在我们眼前的就是视频一样的雪景。

二:雪花的运动

首先载入雪花图片和背景图片。

snow_image = pygame.image.load_extended('snow.png')

用pygame里面的image.load_extend()函数载入。同理,背景图片也可以这样处理。

因为不同的雪花速度,大小以及位置都是不同的,所以我们要定义一个雪花的类来表示这些雪花。其中包含有这些参数。

夏天怎么解暑?教你用python画出《雪景》的效果,太好玩了_第1张图片

其中先定义一些基本的变量,如雪花的速度,位置,尺寸。例如: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知识,或者想要初学者练习资料的,可以加下我下面这个微信~

你可能感兴趣的:(python)