微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OOP Pygame 圈

如何解决OOP Pygame 圈

我正在创建一个游戏,我需要在角色周围创建一个戒指。我编写了用于创建墙的 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

另外,我想传入的变量是颜色、半径、宽度/厚度和 x & y 坐标,例如

circle = Circle(colour,radius,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,(radius,radius),width)
        self.rect = self.image.get_rect(center = (x,y))

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

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

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

    def __init__(self,y,image,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,y))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。