Python 在pygame中更改颜色时出现类型错误

Python 在pygame中更改颜色时出现类型错误,python,pygame,typeerror,Python,Pygame,Typeerror,所以我在pygame中进行实验,并为一个慢慢改变颜色的矩形编写了一些代码 a = 4 b = 3 c = 2 #some irrelevant code later if color[0]+a < 255: color[0] += a else: a *= -1 if color[1]+b < 255: color[1] += b else: b *= -1 if color[

所以我在pygame中进行实验,并为一个慢慢改变颜色的矩形编写了一些代码

a = 4
b = 3
c = 2

#some irrelevant code later

    if color[0]+a < 255:
        color[0] += a
    else:
        a *= -1
    if color[1]+b < 255:
        color[1] += b
    else:
        b *= -1
    if color[2]+c < 255:
        color[2] += c
    else:
        c *= -1
a=4
b=3
c=2
#一些不相关的代码
如果颜色[0]+a<255:
颜色[0]+=a
其他:
a*=-1
如果颜色[1]+b<255:
颜色[1]+=b
其他:
b*=-1
如果颜色[2]+c<255:
颜色[2]+=c
其他:
c*=-1
a、 b和c表示红色、绿色和蓝色的变化速度


问题是,出于某种原因,它会给我一个TypeError:程序运行几秒钟后,颜色参数无效,通常是在颜色非常蓝的情况下。我看不出出现无效颜色参数的任何原因。

您最终将获得-ve颜色。如果颜色太高,可以反转方向,但如果颜色太低,则不能反转方向。检查以确保其也大于0

if 0 < color[0]+a < 255:
    color[0] += a
else:
    a *= -1
如果0
我希望出现
ValueError
而不是
TypeError
,但现在的情况似乎是,如果我们使用
a=4
并使用
color[0]

  • color[0]
    ==250,因此更改为
    254
  • color[0]
    ==254,因此保持不变,
    a
    变为
    -4
  • color[0]
    ==254,因此更改为
    250
  • 。。。保持减法
    4
我不确定-4是不是一种有效的颜色

也许可以考虑使用

>>> from itertools import izip, cycle
>>> a = range(0, 20, 4) + range(20, 0, -4)
>>> b = range(0, 20, 3) + range(20, 0, -3)
>>> c = range(0, 20, 2) + range(20, 0, -2)
>>> test = izip(cycle(a), cycle(b), cycle(c))
>>> for i in range(30):
    print next(test)

(0, 0, 0)
(4, 3, 2)
(8, 6, 4)
(12, 9, 6)
(16, 12, 8)
(20, 15, 10)
(16, 18, 12)
(12, 20, 14)
(8, 17, 16)
(4, 14, 18)
(0, 11, 20)
(4, 8, 18)
(8, 5, 16)
(12, 2, 14)
(16, 0, 12)
(20, 3, 10)
(16, 6, 8)
(12, 9, 6)
(8, 12, 4)
(4, 15, 2)
(0, 18, 0)
(4, 20, 2)
(8, 17, 4)
(12, 14, 6)
(16, 11, 8)
(20, 8, 10)
(16, 5, 12)
(12, 2, 14)
(8, 0, 16)
(4, 3, 18)

由于您在代码的其他地方(可能远离实际发生的
类型错误
的地方!)遇到了类型错误,因此您正在重新定义
颜色。比如说

color = 'blue'
有一个


color
对象的类型是什么?@user1825408在其中输入一些示例代码-认为这与您尝试执行的操作基本相同
from pygame.locals import Color

def color_rand(c):
    try:
        c.r += random.randint(0,10)
    except ValueError:
        c.r = 0

bg = Color(0,0,0)
bg = color_rand(bg)