用 Python 制作动画

Python 虽然不是专业的动画软件,但凭借其强大的库生态,我们也可以轻松实现各种动画效果。下面介绍两种常用方法:Pygame(适合游戏和交互动画)和 Matplotlib(适合数据可视化动画)。

方法一:使用 Pygame 制作简单动画

Pygame 是一个经典的 2D 游戏开发库,非常适合制作交互式动画。

步骤 1:安装 Pygame

bash

pip install pygame

步骤 2:代码示例

python

运行

import pygame
import sys

# 初始化
pygame.init()

# 屏幕设置
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("移动的方块")

# 颜色和方块
x, y = 50, 50
speed = 5
color = (0, 128, 255)

clock = pygame.time.Clock()

while True:
    # 事件处理
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    # 移动方块
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]: x -= speed
    if keys[pygame.K_RIGHT]: x += speed
    if keys[pygame.K_UP]: y -= speed
    if keys[pygame.K_DOWN]: y += speed

    # 绘制
    screen.fill((0, 0, 0))  # 黑色背景
    pygame.draw.rect(screen, color, (x, y, 50, 50))

    pygame.display.flip()
    clock.tick(60)  # 60 FPS

运行后,你会看到一个窗口,用方向键可以移动蓝色方块。

方法二:使用 Matplotlib 制作数据动画

Matplotlib 不仅能绘图,还能生成数据变化的动画。

步骤 1:安装 Matplotlib

bash

pip install matplotlib

步骤 2:代码示例

python

运行

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

# 设置图形
fig, ax = plt.subplots()
x = np.linspace(0, 2*np.pi, 100)
line, = ax.plot(x, np.sin(x))

def update(frame):
    line.set_ydata(np.sin(x + frame * 0.1))
    return line,

# 创建动画
ani = FuncAnimation(fig, update, frames=100, interval=50)

plt.show()

运行后,你会看到一个动态变化的正弦波。

方法三:使用 Pillow 制作 GIF 动画

如果你只想生成 GIF 而不需要交互,可以用 Pillow 库。

步骤 1:安装 Pillow

bash

pip install pillow

步骤 2:代码示例

python

运行

from PIL import Image, ImageDraw

# 创建帧列表
frames = []
width, height = 200, 200

for i in range(30):
    img = Image.new("RGB", (width, height), "white")
    draw = ImageDraw.Draw(img)
    draw.ellipse((i, i, width-i, height-i), fill="blue")
    frames.append(img)

# 保存为 GIF
frames[0].save("circle.gif", save_all=True, append_images=frames[1:], duration=50, loop=0)

运行后,会生成一个圆形逐渐缩小的 GIF 动画。

总结

  • Pygame:适合游戏、交互式动画
  • Matplotlib:适合数据可视化动画
  • Pillow:适合静态 GIF 生成

更多推荐