无法设置 pygame.Color 的 hsva/hsla 属性

RGS*_*RGS 3 python pygame colors python-3.x

正如可以在 pygame 文档中读到的那样,一个pygame.Color对象有两个不同的属性,即pygame.Color.hsva和 ,pygame.Color.hsla可以读取和分配。

然而,我似乎无法做到这一点。事实上,运行脚本

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)
Run Code Online (Sandbox Code Playgroud)

打印出意想不到的结果,即

(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)
Run Code Online (Sandbox Code Playgroud)

这清楚地表明我无法分配给该.hsva属性(将“hsva”更改为“hsla”显示了相同的不稳定行为)。此外,在定义新颜色并尝试更改颜色后,.hsva颜色会完全改变。

我错过了什么还是这是一个错误?

Cla*_*dio 5

为了让其他人更容易在将来访问这个问题时快速获得有用的东西,让我在回答中总结一下讨论的结果:

问题中提供的代码没有显示 Pygame 中的错误,也没有显示任何意外的行为。

要理解其.hsva get/set按预期工作,有必要充分了解 Pygame 中的配色方案如何工作,不要错误地认为更改色调会自行更改颜色,而不管饱和度和值如何。

pygame.color 对象在内部将颜色值存储为 RGB

因此,如果饱和度和值都为 0,则色调根本不会影响 RGB 值 - 它们将全部为零。因此,当您询问其 RGB 值的 hsva 表示形式时,色调可以是任何值,并且默认值似乎为零。

任何色调,但饱和度和值为零,在 RGB 中都将表示为 (0, 0, 0)。因此,改变色调不会影响 RGB。