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 argument が表示されることです。通常、色が非常に青い場合です。無効な色の引数が表示される理由はわかりません。

4

4 に答える 4

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)
于 2012-11-21T23:34:15.157 に答える
0

Colorクラスがあります

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 に答える
0

あなたは最終的に色を取得しています。色が高すぎる場合は方向を反転しますが、色が低すぎる場合は反転しません。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 に答える