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


介绍

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

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

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

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

  • 使用 arcade 创建一个 2D 横版游戏。您可以使用内置的精灵和动画工具创建一个能够在滚动世界中行走、跳跃平台和收集金币的英雄角色。Arcade 的碰撞检测功能还可以用于跟踪游戏英雄角色和其他对象(如敌人或物品)之间的交互。

  • 使用 Arcade 进行 2D 动画。内置的 draw text 和 draw sprite 方法允许您创建一个场景,其中包含可以相互交互的移动角色。使用 Arcade 中的 draw circle 和 draw rectangle 方法,您可以创建其他元素,例如背景场景。

算法

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

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

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

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

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

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

  • 使用 60 个线段和 10 的边框宽度创建雷达的形状。

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

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

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

示例

import arcade
import math

# Height, Width and Title of Animation Window
ARCADE_WIDTH = 1000
ARCADE_HEIGHT = 700
ANIMATION = "Arcade Animation - Radar"

# Constants to determine position of the radar on the window/canvas
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):

      # Update the angle based on the RPM (will be 0, 360)
      self.angle += RPM
   def draw(self):

      # Setting the sweeping radar line using math module
      x = SWEEP * math.sin(self.angle) + CENTER_X
      y = SWEEP * math.cos(self.angle) + CENTER_Y

      # Start rendering before any draw methods.
      arcade.start_render()

      # Line to be animated
      arcade.draw_line(CENTER_X, CENTER_Y, x, y, arcade.color.YELLOW, 4)

      # Decorate the line border/outline
      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)

      # Create our rectangle and set canvas background color
      self.radar = Radar()
      arcade.set_background_color(arcade.color.BLACK)
   def on_update(self, delta_time):
      self.radar.update()
   def on_draw(self):

      # Clear screen and draw the rectangle
      self.clear()
      self.radar.draw()
def main():
   MyGame(ARCADE_WIDTH, ARCADE_HEIGHT, ANIMATION)
   arcade.run()
if __name__ == "__main__":
   main()

让我们检查一下上面雷达动画代码中发生了什么。

  • 常量 **ARCADE_WIDTH**、**ARCADE_HEIGHT** 和 **ANIMATION** 用于设置程序的常量。它们确定动画的窗口大小。

  • 常量 **CENTER_X**、**CENTER_Y**、**RPM** 和 **SWEEP** 用于控制雷达的细节。可以把它想象成将雷达放置在画布上。

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

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

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

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

结论

总的来说,Arcade 模块是创建动态交互式动画的绝佳工具。凭借其简单直观的文档、面向对象的架构和代码示例,使用 Arcade 制作动画对象是一个简单的过程。

更新于:2023年3月24日

324 次浏览

启动你的职业生涯

通过完成课程获得认证

开始学习
广告