我现在已经在游戏中添加了生命,仅使用文本时效果很好。但是,由于我将其更改为图像,因此无法正常工作。当玩家与怪物碰撞时,图像(3颗心)正在显示,但没有减少。 更新:现在包括完整的游戏循环!
class Player(object):
def __init__(self, pos):
self.rect = pygame.Rect(pos[0], pos[1]+32, 32, 32)
self.image = playerImg
self.lives = 3
def life_dis(screen,x,y,lives,img):
for i in range(lives):
img_rect = img.get_rect()
img_rect.x = x+37*i
img_rect.y = y
screen.blit(img, img_rect)
def game_loop():
global walls, players, monsters, finishes, currentLevel
level = 1 #Starting level
running = True
while running:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
pygame.quit()
quit()
screen.fill(blue)
level_dis(level)
#Move the player if an arrow key is pressed
key = pygame.key.get_pressed()
if key[pygame.K_LEFT]:
player.move(-2, 0)
if key[pygame.K_RIGHT]:
player.move(2, 0)
if key[pygame.K_UP]:
player.move(0, -2)
if key[pygame.K_DOWN]:
player.move(0, 2)
#Move monster
for monster in monsters:
monster.move()
#Moving to next level/win
for player in players:
for finish in finishes:
if player.rect.colliderect(finish.rect):
if currentLevel < Highest_level:
currentLevel +=1
level +=1
walls, players, monsters, finishes = load_level(currentLevel)
else:
win()
level = 1
#lives = 3
#Getting caught by the monster
for player in players:
for monster in monsters:
if player.rect.colliderect(monster.rect):
load_current_level()
player.lives -=1
if player.lives == 0:
game_over()
level = 1
#lives = 3
#Draw the scene
screen.blit(background, (0,32))
for wall in walls:
#pygame.draw.rect(screen, green, wall.rect)
screen.blit(wall.image, wall.rect)
for player in players:
#pygame.draw.rect(screen, orange, player.rect)
screen.blit(player.image, player.rect)
for monster in monsters:
#pygame.draw.rect(screen, bright_green, monster.rect)
screen.blit(monster.image, monster.rect)
for finish in finishes:
#pygame.draw.rect(screen, red, finish.rect)
screen.blit(finish.image, finish.rect)
life_dis(screen,500,0,player.lives,lifeImg)
pygame.display.update()
这是代码中的片段,显示了我如何设置“生活”。我可能还没有在正确的地方声明什么!我也不认为这是一个显示更新的事情,因为一旦怪物给了你3次游戏就应该结束游戏,但事实并非如此。预先感谢您的帮助,如果需要,我可以提供完整的代码。
答案 0 :(得分:0)
由于您说的是文本形式,所以我怀疑这是屏幕更新问题。如果您的心脏在每个循环未重绘的屏幕上被遮住,即使您通过pygame.diaplsy.update(),心脏的旧图像也将保留在屏幕上。
在将屏幕上的所有内容都重置之前,尝试使用screen.fill()。
答案 1 :(得分:0)
我现在已经解决了!我从播放器类中删除了self.lives = 3
,而是改用了全局变量lives = 3
。然后,我将player.lives
更改为lives
,加上在主游戏循环中位于global下的lives
,现在一切正常!
感谢您的建议,因为它们确实帮助我解决了这个问题。但是,我仍然想知道为什么它以前不起作用。我是否做错了什么,或者仅仅是由于我的游戏无法正常运行而导致的。再次感谢!