pygame的颜色参数无效

时间:2016-03-29 13:35:03

标签: python pygame

我创建了这个类:

class randcolour:
    def __init__(self):
        self.r = random.randint(0,255)
        self.g = random.randint(0,255)
        self.b = random.randint(0,255)
    def return_colour(self):
        return (self.r, self.g, self.b)
colour = randcolour()
colour.return_colour()

当我尝试在

中使用它时
pygame.draw.rect(screen,colour,[btnx,btny,btnwi,btnle])

我收到此错误:

TypeError: invalid color argument

这里有什么问题?

2 个答案:

答案 0 :(得分:4)

PyGame对你的自定义颜色类一无所知;具体来说,它需要一个指定颜色的数字元组,并且它不知道它需要调用对象的return_color方法来获得这样的元组。你需要自己打电话。

pygame.draw.rect(screen,colour.return_color(),[btnx,btny,btnwi,btnle])

答案 1 :(得分:0)

另一个选择是在您的课程中使用 len getitem 挂钩。这些是允许您在幕后访问列表中的项目的原因。所以这样的事情可以起作用:

class randcolour:
    def __init__(self):
        self.r = random.randint(0,255)
        self.g = random.randint(0,255)
        self.b = random.randint(0,255)

        self.colour = [self.r, self.g, self.b]

    def __len__(self):
        return 3 #Hard coding three, could use len(self.colour) if you like

    def __getitem__(self, key):
        return self.colour[key]

然后

pygame.draw.rect(screen, colour, [btnx, btny, btnwi, btnle])

这样pygame可以“知道”你的randcolour作为序列类型。有关模拟容器的更多信息,请查看:https://docs.python.org/2/reference/datamodel.html#emulating-container-types

注意:在此处使用内存,但我很确定pygame可以使用 len getitem 来处理颜色。它肯定适用于pygame.Rects。