如何使用 Arcade 模块为对象制作动画?

matplotlibpythondata visualization

简介

Python 的 Arcade 模块允许用户构建交互式动画。它具有制作交互式游戏的简单直接的文档,其面向对象的架构使动画对象的处理变得简单。

使用 Arcade 模块制作精彩的动画

Python 中的 Arcade 模块是一个用于创建 2D 视频游戏的 Python 库,可以通过 pip 安装 arcade 包轻松安装。为了在您的 Python 项目中使用 Arcade,您需要通过在终端中运行命令 "pip install arcade" 来安装 Arcade 外部依赖项。

让我们看看这个 Python 包的两个奇妙用途。

  • 使用 Arcade 创建 2D 平台游戏。您可以利用内置的精灵和动画工具创建一个英雄角色,该角色可以在滚动的地球上行走、在平台上跳跃并收集金钱。Arcade 的碰撞检测功能还可用于跟踪游戏的英雄角色与其他对象(如对手或商品)之间的交互。

  • 使用 Arcade 进行 2D 动画。内置的绘制文本和绘制精灵方法可让您构建一个场景,其中的移动演员可以相互交谈。使用 Arcade 中的绘制圆形和绘制矩形方法,您可以生成其他组件,例如背景风景

算法

让我们开始使用 Arcade 创建雷达动画!为此,首先按照上面的指示安装 Arcade 模块。完成后,我们可以保持简单并开始制作动画。

  • 将屏幕的宽度、高度、标题、中心 x、中心 y、每帧弧度和扫描长度设置为常量。

  • 创建一个具有三个函数的雷达类:init、update 和 draw。在 init 函数中将扫描角度设置为 0。

  • 在 update 函数中将扫描角度增加每帧的弧度数。

  • 使用数学、扫描长度以及中心的 x 和 y 坐标计算 draw 函数中的扫描终点。

  • 从中心 x 和中心 y 坐标开始,绘制一条雷达线到扫描的端点。

  • 创建具有 60 个段和 10 个边框宽度的雷达形状。

  • 使用 init、update 和 draw 过程创建 MyGame 类。在 init 方法中创建一个 Radar 对象,并将背景颜色设置为黑色。

  • 在 update 函数中调用 Radar 对象的 update 方法。

  • 在 draw 函数中清除屏幕,然后调用 Radar 的 draw 函数。

示例

import arcade
import math

# 动画窗口的高度、宽度和标题
ARCADE_WIDTH = 1000
ARCADE_HEIGHT = 700
ANIMATION = "Arcade Animation - Radar"

# 用于确定雷达在窗口/画布上的位置的常量
CENTER_X = ARCADE_WIDTH // 2
CENTER_Y = ARCADE_HEIGHT // 2
RPM = 0.01
SWEEP = 200
class Radar:
   def __init__(self):
      self.angle = 0
   def update(self):

    # 根据 RPM 更新角度(将为 0, 360)
    self.angle += RPM
    def draw(self):
    
        # 使用数学模块设置扫描雷达线
        x = SWEEP * math.sin(self.angle) + CENTER_X
        y = SWEEP * math.cos(self.angle) + CENTER_Y
        
        # 在任何绘制方法之前开始渲染。
        arcade.start_render()
        
        # 要动画的线
        arcade.draw_line(CENTER_X, CENTER_Y, x, y, arcade.color.YELLOW, 4)
        
        # 装饰线边框/轮廓
      arcade.draw_circle_outline(CENTER_X,CENTER_Y,SWEEP,arcade.color.BLUE_SAPPHIRE,border_width=15,num_segments=60)
class MyGame(arcade.Window):
   """ Main application class. """
   def __init__(self, width, height, title):
        super().__init__(width, height, title)
        
        # 创建矩形并设置画布背景颜色
        self.radar = Radar()
        arcade.set_background_color(arcade.color.BLACK)
        def on_update(self, delta_time):
            self.radar.update()
        def on_draw(self):
        
            # 清除屏幕并绘制矩形
            self.clear()
            self.radar.draw()
def main():
   MyGame(ARCADE_WIDTH, ARCADE_HEIGHT, ANIMATION)
   arcade.run()
if __name__ == "__main__":
   main()

让我们来看看上面的雷达动画代码中发生了什么。

  • 常量ARCADE_WIDTHARCADE_HEIGHTANIMATION用于设置程序的常量。它们决定动画的窗口大小。

  • 常量CENTER_XCENTER_YRPMSWEEP用于控制雷达的细节。想象一下将雷达放在画布上。

  • Radar 类用于创建和绘制雷达。 __init__() 方法用于定义雷达的角度,初始设置为 0。update() 和 draw() 方法分别用于更新和绘制雷达。update() 方法用于通过将 RPM 添加到 self.angle 来移动扫描的角度。draw() 方法使用数学模块计算雷达扫描的终点,然后绘制雷达线和雷达轮廓。

  • MyGame 类用于创建主应用程序类。它继承了 Arcade 模块的 Window 类。__init__() 方法用于创建矩形、设置画布背景颜色并调用 Radar 类创建雷达。 on_update() 方法用于更新雷达,on_draw() 方法用于清除屏幕并绘制雷达。

  • main() 方法用于调用 MyGame 类,arcade.run() 方法用于运行程序。

  • if __name__ == "__main__": 语句用于检查代码是否直接运行而不是导入。

结论

总体而言,Arcade 模块是创建动态交互式动画的绝佳工具。由于 Arcade 具有简单直接的文档、面向对象的架构和代码示例,因此使用 Arcade 制作动画对象是一个简单的过程。


相关文章