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绘制跨屏幕的图形时,那些只露出一小部分的边缘像素没法被完整填充,视觉上就显得颜色变淡,也就是你看到的“褪色”。
解决办法
把圆弧的位置调整到屏幕内部,确保整个绘制矩形都在屏幕范围内就行:
- 修改
dial_x和dial_y的值,保证dial_x - radius >= 0、dial_y - radius >= 0,同时dial_x + radius <= SCREEN_SIZE、dial_y + radius <= SCREEN_SIZE。 - 修改后的完整代码(补上原代码缺失的事件循环和屏幕刷新,不然画面显示不正常):
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
相关产品推荐
相关产品推荐

