繁体   English   中英

在pygame中更改颜色时发生TypeError

[英]TypeError when changing colors in pygame

所以我在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:无效的color参数。 我看不到任何会出现无效颜色参数的原因。

我期望有一个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)

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

if 0 < color[0]+a < 255:
    color[0] += a
else:
    a *= -1

由于您收到TypeError,因此在代码的其他地方(可能与TypeError实际发生的地方相距很远!),您正在重新定义color 例如,类似

color = 'blue'

有一个颜色课

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)    

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM