OOP Pygame 圈

OOP Pygame Circle

我正在创建一个游戏,我需要在角色周围创建一个环。我编写了用于创建墙的 OOP,如下所示,但我不知道如何调整此代码以便它可以在我的播放器周围创建一个环。

class Wall(pygame.sprite.Sprite):
    def __init__(self, x, y, width, height, color):
        super().__init__()
        self.image = pygame.Surface([width, height])
        self.image.fill(color)
        self.rect = self.image.get_rect()
        self.rect.y = y
        self.rect.x = x

此外,我要传入的变量是颜色、半径、width/thickness 和 x & y 坐标,例如

circle = Circle(colour, radius, width, x, y)

绘图精灵编辑:

spriteList.add(wallList)
spriteList.draw(screen)

非常感谢任何帮助, 干杯

可以用pygame.draw.circle画圆

pygame.draw.circle(surface, color, center, radius)

如果你只是想画一个圆形精灵,你需要做的就是指定圆的半径和宽度(线宽):

class Circle(pygame.sprite.Sprite):

    def __init__(self, circleColor, radius, width, x, y):
        super().__init__()
        
        self.image = pygame.Surface((radius * 2, radius * 2), pygame.SRCALPHA)
        pygame.draw.circle(self.image, circleColor, (radius, radius), radius, width)
        self.rect = self.image.get_rect(center = (x, y))

使用此解决方案,您需要在同一位置分别绘制 2 个对象,精灵和圆圈。

但是,如果您想要创建一个周围有圆圈的单个 sprite 对象,则需要创建一个比 sprite 图像大的透明表面。 blit 表面上的精灵并在其周围画一个圆圈。下面image是一个pygame.Surface对象:

import math
class MyPlayer(pygame.sprite.Sprite):

    def __init__(self, x, y, image, circleColor, width):
        super().__init__()
        
        diameter = math.hypot(*image.get_size())
        radius = diameter // 2

        self.image = pygame.Surface((diameter, diameter), pygame.SRCALPHA)
        self.image.blit(image, image.get_rect(center = (radius, radius))
        pygame.draw.circle(self.image, circleColor, (radius, radius), radius, width)
        self.rect = self.image.get_rect(center = (x, y))