我正在尝试制作一个健康栏,根据健康百分比将绿色缩放为红色。基本上,我试图使值 0.5 对应于 (255, 255, 0),值 1.0 对应于 (0, 255, 0),值 0.0 对应于 (255,0,0) 。我看见这个帖子 https://stackoverflow.com/questions/25943241/color-from-green-to-red-with-percentage,其意图与我相同,但在代码方面并没有太大帮助。同样适用于这个帖子 https://stackoverflow.com/questions/340209/generate-colors-between-red-and-green-for-a-power-meter.
这是我当前的代码:
def draw_player_health_mana(surface, x, y, curr_value, start_value, type_bar, font):
#TRANSFORMS THE VALUES TO PERCENTAGE
pct = curr_value/start_value
if pct < 0:
pct = 0
#SIZE OF THE HEALTH BAR
BAR_LENGTH = 150
BAR_HEIGHT = 18
#INITIAL COLOR VALUES
red_color = 255
green_color = 255
#THE FILLED BAR TO DISPLAY VISUALLY OF CURRENT HP COMPARED TO MAX HP
fill = pct * BAR_LENGTH
#PYGAME RECTANGLES
outline_rect = pg.Rect(x, y, BAR_LENGTH, BAR_HEIGHT)
fill_rect = pg.Rect(x, y, fill, BAR_HEIGHT)
#CHECKS WHAT TYPE OF BAR IS CALLED FOR - THERES MANA AND HEALTH
if type_bar == 'health':
#THE DIFFERENCE IN PERCENTAGE, MEANT AS AN INCREASE
pct_diff = 1.0 - pct
#INTENT IS TO CHECK IF PERCENTAGE IS ABOVE 50%, THEN DECREASE THE GREEN SPECTRUM
#BUT AS SHOWN, IT NEVER DECREASES TO 0, BUT ONLY TO HALF OF 255...
#LIKEWISE FOR THE INCREASE OF RED_COLOR
if pct > 0.5:
red_color = 255 * pct #### Can't really figure out how to deal with this part
else:
green_color = 255*pct_diff
col = (red_color, green_color, 0)
print(col)
elif type_bar == 'mana':
col = BLUE
pg.draw.rect(surface, col, fill_rect)
pg.draw.rect(surface, BLACK, outline_rect, 2)
text = font.render(str(curr_value) + "/" + str(start_value), True, BLACK)
text_rect = text.get_rect(center=(BAR_LENGTH/2 + x, BAR_HEIGHT/2 + y))
surface.blit(text, text_rect)
正如上面语法中所述,问题在于颜色转换。颜色为(红色、绿色、蓝色)。对于健康状况良好的漂亮绿色,它应该是 (0, 255, 0)。然而,当健康状况转向 50% 时,红色必须达到 255 的值(导致 (255, 255, 0),我不知道如何有效地做到这一点,同时将绿色的减少过渡到 0 以达到更多的是红色..我在这件事上感到非常迷失,任何类型的帮助将不胜感激。
提前致谢。