问题描述
我正在尝试制作一个健康条,根据健康百分比将绿色缩放为红色。基本上,我试图使 0.5 的值对应于 (255,255,0),而 1.0 的值对应于 (0,0) 并且 0.0 的值对应于 (255,0) .我看到了 This Post,它的意图与我相同,但在代码方面并没有太大帮助。同样适用于 This Post。
这是我当前的代码:
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,BAR_LENGTH,BAR_HEIGHT)
fill_rect = pg.Rect(x,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,0)。但是,随着健康状况向 50% 转变,红色必须达到 255 的值(导致 (255,0),我无法弄清楚如何有效地将绿色减少到 0 以达到更多的是红色..我对这件事感到非常迷茫,任何类型的帮助将不胜感激。
提前致谢。