正如人们可以在pygame文档here中读到的那样,pygame.Color
对象有两个不同的属性,即pygame.Color.hsva
和pygame.Color.hsla
,可以读取和分配给它们。 / p>
然而,我似乎无法做到这一点。实际上,运行脚本
import pygame
from pygame import Color as C
pygame.init()
t = (100, 0, 0, 100)
c = C(0,0,0)
print(c.hsva)
c.hsva = t
print(c.hsva)
c = C(100, 45, 10)
print(c.hsva)
c.hsva = t
print(c.hsva)
打印意外结果,即
(0.0, 0.0, 0.0, 100.0)
(0.0, 0.0, 0.0, 100.0)
(23.333333333333336, 89.99999999999999, 39.21568627450981, 100.0)
(0.0, 0.0, 0.0, 100.0)
这清楚地表明我无法分配到.hsva
属性(将“hsva”更改为“hsla”会显示相同的不稳定行为)。此外,在定义新颜色并尝试完全更改.hsva
颜色后。
我错过了什么或这是一个错误吗?
答案 0 :(得分:1)
为了让其他人能够更容易地在将来访问这个问题时快速采取有用的东西,让我在答案中总结一下讨论的结果:
在提供的问题中代码没有显示Pygame中的错误,也没有显示任何意外行为。
要理解.hsva get/set
按预期工作,有必要充分了解颜色方案在Pygame中的工作方式,而不是错误地认为改变色调会自行改变颜色,无论如何饱和度和价值。
pygame.color对象在内部将颜色值存储为RGB 。
因此,如果饱和度和值均为0,则色调不会影响 RGB值完全 - 它们都是零。所以,当你问它 对于其RGB值的hsva表示, 色调可以是任何东西,似乎默认为零。
任何事物的色调,但饱和度和零值将被表示 在RGB中为(0,0,0)。因此,改变色调不会影响RGB。