簡體   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