如果按下某个键,如何增加矩形的大小?

时间:2017-06-27 01:35:27

标签: python pygame

使用pygame,我试图创建一个简单的机制,它会在我的代码的右上角增加一个矩形,在这种情况下它是一个健康栏。现在我希望每次按下按钮时都会增加栏数。点击。这是我的代码:

    DISPLAYSURF = DISPLAYSURF = pygame.display.set_mode((900, 550), 0, 32)

    heatBar = [45, 30]
    hbPosition = [45, 30]
    # Main game loop
    while True:
        heatBar.insert(0, list(hbPosition))
        for event in pygame.event.get():
        #Heat Bar (Tap x to increase)
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_x:
                for pos in heatBar:
                    pygame.draw.rect(DISPLAYSURF, GREEN, 
                    pygame.Rect(pos[0],pos[1],10,50))

最后一行的pygame.Rect是前一行的一部分。 无论如何,我试图添加各种东西并评论出来,但我似乎无法让它发挥作用。关于我做错了什么或如何解决它的任何想法?

1 个答案:

答案 0 :(得分:0)

以下是健康栏的示例:

import pygame

pygame.init()

w, h = 400, 400
screen = pygame.display.set_mode((w, h))

health = 0

while True:
    screen.fill((0, 0, 0))
    if pygame.event.poll().type == pygame.QUIT: pygame.quit(); break
    keys = pygame.key.get_pressed()
    if keys[pygame.K_x]:
        health += 0.1

    pygame.draw.rect(screen,
                     (100, 240, 100),
                     pygame.Rect(0, 0, health, 35
    ))
    pygame.display.flip()

编辑(添加额外功能):

import pygame

pygame.init()

w, h = 400, 400
screen = pygame.display.set_mode((w, h))

# I decided to go for a maxhealth type thing here,
health = 100

while True:
    screen.fill((0, 0, 0))

    # VVV This line polls pygames events and checks if it a QUIT event,
    if pygame.event.poll().type == pygame.QUIT: pygame.quit(); break

    # This relies on the previous line being called, or else it won't update,
    keys = pygame.key.get_pressed()

    # I added `Z` for adding to the health too,
    if keys[pygame.K_x] and health > 0:
        health -= 0.1
    if keys[pygame.K_z] and health < 100:
        health += 0.1

    # The tint value is multiplied by 2.55 to map 0-100 to 0-255. Try it yourself(algebra): 255/100 = 2.55,
    tint = 255 - (health * 2.55)
    pygame.draw.rect(screen,
                     (tint, 255 - tint, 0),
                     pygame.Rect(0, 0, health, 35
    ))
    pygame.display.flip()

不幸的是,由于tint的工作方式,中间范围看起来像一种丑陋的褐色。

此外,我强烈建议您使用classes制作游戏,它们更加统一,并且非常适合制作大型项目。

这里有一个很好的链接:https://www.youtube.com/watch?v=ZDa-Z5JzLYM

编辑(修复褐色):

要修复褐色,请更改此行:

pygame.draw.rect(screen,
                (tint, 255 - tint, 0),
                pygame.Rect(0, 0, health, 35
))

要,

pygame.draw.rect(screen,
                (min(255, tint * 2), min(255, 335 - tint), 0),
                 pygame.Rect(0, 0, health, 35
))

注意:使用min(255, ...)将有效确保该值不超过255,因为只要该数字小于255,它就会返回数字,否则返回255。将tint乘以2基本上抵消了它,而335 - tint也会抵消另一个,您可以将335更改为另一个数字以更改健康栏中黄色的位置:)