我用Python语言编写了一个带 flashlight 的程序,想要在 flashlight 打开时改变电池表.我做了一个更简单的版本,它只有这样的变化:

high = pygame.image.load("battery_high.jpeg")
medium = pygame.image.load("battery_med.jpeg")
low = pygame.image.load("battery_low.jpeg")

battery = 100

while True:
    battery -= 0.1;
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            break
    game_display.fill(WHITE)

    battery_img = None

    if battery > 66:
        battery_img = high;
    elif battery > 33:
        battery_img = medium;
    else:
        battery_img = low;
    display.blit(battery_img, (0, 0));
    
    pygame.display.flip()

更换电池并不是那么顺利,如果我有60%的电池,我希望计价器有60%的电量.我该怎么做呢?我认为解决办法是切断图像,但我不知道怎么做.

推荐答案

你只有3张图片.要么你需要更多的图像,要么你必须在PYGAME中绘制比例.下面是一段在图像上绘制动态比例的简单代码.刻度盘只是一个矩形,其高度随电池电量的变化而变化:

import pygame

pygame.init()
screen = pygame.display.set_mode((300, 200))
clock = pygame.time.Clock()

battery_image_v = pygame.Surface((50, 100))
battery_image_v.fill("darkgray")
pygame.draw.rect(battery_image_v, "black", (18, 3, 14, 94))
scale_image_v = pygame.Surface((10, 90))

battery_image_h = pygame.Surface((100, 50))
battery_image_h.fill("darkgray")
pygame.draw.rect(battery_image_h, "black", (3, 18, 94, 14))
scale_image_h = pygame.Surface((90, 10))

battery = 100

run = True
while run:
    clock.tick(100)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False 
    
    battery -= 1
    if battery < 0:
        battery = 100

    scale_image_v.fill("black")
    h = battery * scale_image_v.get_height() // 100
    y = scale_image_v.get_height() - h
    pygame.draw.rect(scale_image_v, "green", (0, y, 10, h))

    scale_image_h.fill("black")
    w = battery * scale_image_h.get_width() // 100
    pygame.draw.rect(scale_image_h, "green", (0, 0, w, 10))

    screen.fill("white")
    screen.blit(battery_image_v, battery_image_v.get_rect(center = (100, 100)))
    screen.blit(scale_image_v, scale_image_v.get_rect(center = (100, 100)))
    screen.blit(battery_image_h, battery_image_h.get_rect(center = (200, 100)))
    screen.blit(scale_image_h, scale_image_h.get_rect(center = (200, 100)))
    pygame.display.flip()

pygame.quit()
exit()

Python相关问答推荐

使用Python Cerberus初始化一个循环数据 struct (例如树)(v1.3.5)

在上下文管理器中更改异常类型

Python中的函数中是否有充分的理由接受float而不接受int?

根据网格和相机参数渲染深度

Python Hashicorp Vault库hvac创建新的秘密版本,但从先前版本中删除了密钥

Class_weight参数不影响RandomForestClassifier不平衡数据集中的结果

如何才能知道Python中2列表中的巧合.顺序很重要,但当1个失败时,其余的不应该失败或是0巧合

连接两个具有不同标题的收件箱

如何使用LangChain和AzureOpenAI在Python中解决AttribeHelp和BadPressMessage错误?

如何在虚拟Python环境中运行Python程序?

如何在类和classy-fastapi -fastapi- followup中使用FastAPI创建路由

如何在solve()之后获得症状上的等式的值

如何让这个星型模式在Python中只使用一个for循环?

如何根据一列的值有条件地 Select 前N个组,然后按两列分组?

计算天数

下三角形掩码与seaborn clustermap bug

如何防止Pandas将索引标为周期?

PYTHON、VLC、RTSP.屏幕截图不起作用

将一个双框爆炸到另一个双框的范围内

递归函数修饰器