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

PyGame绘制圆弧出现不规则颜色褪色问题的排查与解决

PyGame圆弧褪色问题的原因与解决办法

最小可复现代码

SCREEN_SIZE = 400
screen = pygame.display.set_mode((SCREEN_SIZE, SCREEN_SIZE))
color = (119, 221, 119) # 换别的颜色也一样有问题
width = 6
radius = (90 + width) * 0.8250
dial_x, dial_y = 10, 10
rect = (dial_x - radius, dial_y - radius, 2*radius, 2*radius)

start_angle_in_deg = 10
stop_angle_in_deg = 60

pygame.draw.arc(screen, color, rect, math.radians(start_angle_in_deg), math.radians(stop_angle_in_deg), width)

当前效果

褪色的圆弧

能看到圆弧颜色不均匀,部分区域明显褪色。

问题

为什么会出现这种情况?怎么解决?

原因

这是因为圆弧的绘制区域超出了屏幕边界。算一下:radius大概是76.875,dial_x和dial_y设成10,那圆弧的左上角坐标是10 - 76.875 = -66.875,完全在屏幕外面。PyGame绘制跨屏幕的图形时,那些只露出一小部分的边缘像素没法被完整填充,视觉上就显得颜色变淡,也就是你看到的“褪色”。

解决办法

把圆弧的位置调整到屏幕内部,确保整个绘制矩形都在屏幕范围内就行:

  1. 修改dial_x和dial_y的值,保证dial_x - radius >= 0、dial_y - radius >= 0,同时dial_x + radius <= SCREEN_SIZE、dial_y + radius <= SCREEN_SIZE。
  2. 修改后的完整代码(补上原代码缺失的事件循环和屏幕刷新,不然画面显示不正常):
import pygame
import math

SCREEN_SIZE = 400
screen = pygame.display.set_mode((SCREEN_SIZE, SCREEN_SIZE))
color = (119, 221, 119)
width = 6
radius = (90 + width) * 0.8250
# 调整位置,让整个圆弧都在屏幕里
dial_x, dial_y = radius + 10, radius + 10
rect = (dial_x - radius, dial_y - radius, 2*radius, 2*radius)

start_angle_in_deg = 10
stop_angle_in_deg = 60

# 绘制圆弧
pygame.draw.arc(screen, color, rect, math.radians(start_angle_in_deg), math.radians(stop_angle_in_deg), width)

# 事件循环和屏幕刷新
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    pygame.display.flip()

pygame.quit()

内容的提问来源于stack exchange,提问作者3kstc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:25:26