使用 Python 的 Arcade 模块创建雪花效果


我们都想为演示文稿或视频添加额外的效果。这些效果有助于我们更好地展示产品或提升用户体验。在本教程中,您将学习如何使用 Arcade 模块实现雪花效果。

您可以在游戏中使用它来创建下雪或下雨的效果。您甚至可以将其设置为屏幕超时效果。

话不多说,让我们开始吧!

开始

在本教程中,我们将使用 Arcade 模块,该模块帮助用户轻松创建游戏相关功能。

此模块并非 Python 预装模块。这意味着我们将使用 pip 包管理器来安装它。

为此,请使用以下命令。

pip3 install arcade

安装 Arcade 模块后,我们将各种方法导入到我们的脚本中。

为此,我们在 Python 中使用 **import** 关键字后跟模块名称。

import arcade

就是这样!您现在可以开始着手进行任务了。

使用 Arcade 模块创建雪花效果

我们需要导入 random 和 math 模块以及 Arcade 模块。您很快就会明白原因。

import random
import math
import arcade

现在,首先我们必须定义每个雪花。在这个脚本中,每个雪花都是屏幕上的一个点。因此,我们将考虑其在输出屏幕上的位置的 x 和 y 变量。

我们还定义了一个 reset_pos 函数,我们将使用它来定义雪花到达窗口末端后的位置。

class Snow:
   def __init__(self, height, width):
      self.x = 0
      self.y = 0
   def reset_pos(self, height, width):
      self.y = random.randrange(height, height + 100)
      self.x = random.randrange(width)

就是这样。我们现在定义了一个雪花教程。现在,我们需要开始处理输出窗口以及雪花教程下降的模式。

首先,我们定义使用 Arcade 模块绘制输出屏幕的基本函数。

class MyGame(arcade.Window):
   def __init__(self, width, height):
      super().__init__(width, height)
      self.stream = None

现在,我们定义一个在启动脚本时运行的 start 函数。

此函数将负责描述这些教程的每一个的运动。它们下降的角度、下降的速度、教程的大小以及它相对于输出窗口在屏幕上的位置。

这就是 random 导入发挥作用的地方。我们使用 random 模块来调节这些教程的随机生成。

def start(self, height, width):
   self.stream = []
   for i in range(100): # Increase to increase number of snow ptutorials.
   snow = Snow(800, 600)
   snow.x = random.randrange(width)
   snow.y = random.randrange(height + 200)
   snow.size = random.randrange(2)
   snow.speed = random.randrange(20, 100)
   snow.angle = random.uniform(math.pi, math.pi * 2)
   self.stream.append(snow)

   # define bg colour
   arcade.set_background_color(arcade.color.BLACK) 

现在,我们需要使用默认的 on_draw 函数来在输出窗口上生成教程。

def on_draw(self):  # This is a default function.
arcade.start_render()
for snow in self.stream:
   arcade.draw_circle_filled(snow.x, snow.y, snow.size, arcade.color.WHITE)

我们还需要定义 on_update 函数,该函数将定义教程在 y 方向上越过输出窗口边界限制后的位置。

def on_update(self, delta_time):  # This is a default function.
for snow in self.stream:
   snow.y = snow.y - snow.speed * delta_time
   if snow.y < 0:
      snow.reset_pos(800, 600)
      snow.x = snow.x + snow.speed * math.cos(snow.angle) * delta_time
      snow.angle = snow.angle + delta_time

就是这样!您现在已经准备好完整的脚本了!让我们使用 main 函数并定义窗口的边界并运行 Arcade 函数。

if __name__ == "__main__":
   window = MyGame(800, 600)
   window.start(800, 600)
   arcade.run()

它将产生以下 **输出** −

完整脚本

以下是完整代码 −

import random
import math
import arcade

class Snow:
   def __init__(self, height, width):
      self.x = 0
      self.y = 0

   def reset_pos(self, height, width):
      self.y = random.randrange(height, height + 100)
      self.x = random.randrange(width)

class MyGame(arcade.Window):
   def __init__(self, width, height):
      super().__init__(width, height)
      self.stream = None

   def start(self, height, width):
      self.stream = []

      for i in range(100):
         snow = Snow(800, 600)
         snow.x = random.randrange(width)
         snow.y = random.randrange(height + 200)
         snow.size = random.randrange(2)
         snow.speed = random.randrange(20, 100)
         snow.angle = random.uniform(math.pi, math.pi * 2)
         self.stream.append(snow)
      arcade.set_background_color(arcade.color.BLACK)

   def on_draw(self):  # This is a default function.
      arcade.start_render()
      for snow in self.stream:
         arcade.draw_circle_filled(snow.x, snow.y, snow.size, arcade.color.WHITE)

   def on_update(self, delta_time):  # This is a default function.
    for snow in self.stream:
      snow.y = snow.y - snow.speed * delta_time
      if snow.y < 0:
         snow.reset_pos(800, 600)
      snow.x = snow.x + snow.speed * math.cos(snow.angle) * delta_time
      snow.angle = snow.angle + delta_time

if __name__ == "__main__":
   window = MyGame(800, 600)
   window.start(800, 600)
   arcade.run()

结论

您现在知道如何使用 Python 中的 Arcade 模块在 GUI 输出屏幕上创建雪花效果。您可以通过更改某些值来继续试验它。

更新于:2023年8月4日

173 次查看

启动您的 职业生涯

完成课程获得认证

开始
广告