使用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是前一行的一部分。 无论如何,我试图添加各种东西并评论出来,但我似乎无法让它发挥作用。关于我做错了什么或如何解决它的任何想法?
答案 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
更改为另一个数字以更改健康栏中黄色的位置:)