【问题标题】:TypeError when changing colors in pygame在pygame中更改颜色时出现TypeError
【发布时间】:2012-11-21 23:21:22
【问题描述】:

所以我在 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 参数,通常是在颜色很蓝的时候。我看不出出现无效颜色参数的任何原因。

【问题讨论】:

  • color 对象的类型是什么?

标签: python pygame typeerror


【解决方案1】:

我希望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)

【讨论】:

  • @user1825408 放一些示例代码 - 认为这实际上与您尝试做的相同
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    color = 'blue'
    

    【讨论】:

      【解决方案4】:

      有一个Color class

      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)    
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多