You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pygame Zero中实现圆弧向上移动的动画效果?

在Pygame Zero中实现圆弧向上移动的动画效果

嘿,我来帮你搞定这个烟囱烟雾的动画!你现在的核心问题是缺少动态控制烟雾位置的变量,以及没补全pygame.draw.arc的必要参数。咱们一步步来改:

第一步:添加全局动态变量

首先在全局变量区域加一个控制烟雾位置的偏移量,这样每次更新时我们能改变它的位置:

import random
import pygame
import math
WIDTH = 700
HEIGHT = 500
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
BLUE = (0, 0, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
BROWN = (101, 67, 33)
YELLOW = (255, 255, 0)
PI = math.pi

# 新增:控制烟雾向上偏移的变量
smoke_y_offset = 0

第二步:完善update函数

update函数是Pygame Zero里负责帧更新的地方,我们在这里让偏移量持续减小(因为Pygame的y轴向下为正,减小y值就等于向上移动),当烟雾移出可视区域后重置,实现循环动画:

def update():
    global smoke_y_offset
    # 让烟雾向上移动,数值越大移动速度越快
    smoke_y_offset -= 0.5
    # 当烟雾完全移到初始位置上方后重置,实现循环
    if smoke_y_offset < -100:
        smoke_y_offset = 0

第三步:完善chimney_smoke函数

接下来补全pygame.draw.arc的参数,同时把偏移量应用到烟雾的y坐标上,让它跟着偏移量移动:

def chimney_smoke(x, y, w, h):
    # pygame.draw.arc的参数:表面、颜色、矩形区域、起始角度、结束角度、线宽(可选)
    # 这里我们画一个上半圆(从0到PI),作为烟囱的烟雾
    # 把y坐标加上偏移量,实现向上移动的效果
    pygame.draw.arc(screen.surface, BLACK, [x, y + smoke_y_offset, w, h], 0, PI, 5)

完整代码

把所有部分整合起来,就是这样:

import random
import pygame
import math
WIDTH = 700
HEIGHT = 500
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
BLUE = (0, 0, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
BROWN = (101, 67, 33)
YELLOW = (255, 255, 0)
PI = math.pi

smoke_y_offset = 0

def draw():
    screen.fill(BLUE)
    chimney_smoke(400, 90, 50, 100)

def update():
    global smoke_y_offset
    smoke_y_offset -= 0.5
    if smoke_y_offset < -100:
        smoke_y_offset = 0

def chimney_smoke(x, y, w, h):
    pygame.draw.arc(screen.surface, BLACK, [x, y + smoke_y_offset, w, h], 0, PI, 5)

小提示

  • 如果你想让烟雾移动更快,可以把smoke_y_offset -= 0.5里的数值改大,比如改成-1或者-2。
  • 要是想让烟雾更像真实的烟,可以多画几个不同大小、不同移动速度的圆弧,叠加起来效果会更自然。

内容的提问来源于stack exchange,提问作者Ben Hutton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:34:44