微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 PyGame 将基于百分比的颜色值从绿色变为红色

如何解决使用 PyGame 将基于百分比的颜色值从绿色变为红色

我正在尝试制作一个健康条,根据健康百分比将绿色缩放为红色。基本上,我试图使 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 以达到更多的是红色..我对这件事感到非常迷茫,任何类型的帮助将不胜感激。

提前致谢。

解决方法

0.5对应(255,255,0),1.0对应(0,0) (255,0),1.0对应(0,0)

因此绿色分量是min(255,pct_diff*2 * 255),红色分量是min(255,pct*2 * 255)

pct_diff = 1.0 - pct
red_color = min(255,pct_diff*2 * 255)
green_color = min(255,pct*2 * 255)
col = (red_color,green_color,0)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。