我不能在球员的中心位置画圆圈

2024-03-28 08:38:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在我的球员中间位置加一个圆圈。然而,我只能看到圆圈的边缘。这是我的密码

class Cavit(pg.sprite.Sprite):
    def __init__(self):
        pg.sprite.Sprite.__init__(self)
        self.image = pg.Surface((50,50))
        self.rad = 100
        self.image.fill((255,0,0))
        self.rect = self.image.get_rect()
        self.rect.center = 100,100
        pg.draw.circle(self.image,(0,0,0),self.rect.center,self.rad,5)
        self.pos = vec(100,100)
        self.vel = vec(0,0)
        self.acc = vec(0,0)
        self.friction = 0.1
        self.playeracc = 0.8

我正在分享这张照片,这样你就可以看到我所期待的奇怪了。我想要一个半径为100的圆,包围着矩形。 enter image description here


1条回答
网友
1楼 · 发布于 2024-03-28 08:38:34

圆的半径是图像大小的一半。在世界中设置矩形的中心之前,需要先找到图像矩形的中心:

class Cavit(pg.sprite.Sprite):
    def __init__(self):
        pg.sprite.Sprite.__init__(self)
        self.image = pg.Surface((50,50))
        self.image.fill((255,0,0))

        self.rect = self.image.get_rect()
        self.rad = min(self.rect.width, self.rect.height) // 2
        pg.draw.circle(self.image, (0,0,0), self.rect.center, self.rad, 5)
        self.rect.center = 100, 100

        # [...]

请注意,您是在图像上绘制圆,而不是在屏幕上。因此,圆心是图像的中心,而不是屏幕上图像的中心


如果圆需要大于矩形,则图像需要为圆的大小:

class Cavit(pg.sprite.Sprite):
    def __init__(self):
        pg.sprite.Sprite.__init__(self)
        
        self.rad = 100
        
        self.image = pg.Surface((self.rad*2, self.rad*2), pygame.SRCALPHA)
        self.rect = self.image.get_rect()
        
        inner_rect = pygame.Rect(0, 0, 50, 50)
        inner_rect.center = self.rect.center
        pygame.draw.rect(self.image, (255, 0, 0), inner_rect)
        
        pg.draw.circle(self.image, (0,0,0), self.rect.center, self.rad, 5)

        self.rect.center = 100, 100

        # [...]

相关问题 更多 >