如何在Pygame Surface中绘制圆弧?求助排查显示问题
问题解决:Pygame中圆弧无法显示的原因及修复
你遇到的问题核心是圆弧绘制的矩形区域超出了Surface的范围,导致圆弧被画在不可见的区域。
问题分析
你使用rect = surf.get_rect(center=(100, 100))得到的矩形,是用于控制surf在屏幕上的位置的,它的左上角坐标是(50,50),右下角是(150,150)——而你的surf只有100x100的尺寸,这个矩形完全超出了surf的边界,所以圆弧被绘制在Surface外面,自然看不到。
修正后的代码
import pygame import math pygame.init() width, height = 800, 600 screen = pygame.display.set_mode((width, height)) surf = pygame.Surface((100, 100)) surf.fill("green") # 单独定义控制surf在屏幕位置的矩形 surf_screen_rect = surf.get_rect(center=(100, 100)) run = 1 while run: for event in pygame.event.get(): if event.type == pygame.QUIT: run = 0 screen.fill((255, 202, 135)) pygame.draw.circle(surf, (255, 255, 255), (30,30),25) # 使用surf自身的边界矩形绘制圆弧,同时设置宽度让圆弧更明显 pygame.draw.arc(surf, (255, 255, 255), surf.get_rect(), math.radians(270), math.radians(90), width=5) screen.blit(surf, surf_screen_rect) pygame.display.flip() pygame.quit()
关键修改点
- 分离矩形用途:将控制
surf在屏幕位置的矩形和圆弧绘制的矩形分开,避免混淆。 - 使用Surface自身的矩形:
surf.get_rect()会返回(0, 0, 100, 100)的矩形,确保圆弧绘制在surf的可见范围内。 - 增加圆弧宽度:默认宽度为1,可能过于纤细不易观察,设置
width=5让圆弧更清晰。
额外说明:调整半圆方向
Pygame中arc的角度以x轴正方向为0,逆时针递增,你可以通过调整角度范围绘制不同方向的半圆:
- 上半圆:
math.radians(180)到math.radians(0) - 下半圆:
math.radians(0)到math.radians(180) - 左半圆:
math.radians(90)到math.radians(270)
内容的提问来源于stack exchange,提问作者suyog
相关产品推荐
相关产品推荐

