0

所以我在 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、b 和 c 作为红色、绿色和蓝色的变化速度。

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

4

4 回答 4

1

我希望 aValueError而不是 a 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)
于 2012-11-21T23:34:15.157 回答
0

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

if 0 < color[0]+a < 255:
    color[0] += a
else:
    a *= -1
于 2012-11-21T23:34:07.333 回答
0

由于您收到 TypeError,代码中的其他地方(可能远离TypeError实际发生的位置!),您正在重新定义color. 例如,像

color = 'blue'
于 2012-11-21T23:35:00.477 回答
0

有一个颜色类

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)    
于 2012-11-22T00:36:01.843 回答