如何在pygame的while循环中只减少一个生命值?
How to reduce only a single life in a while loop in pygame?
所以基本上我正在制作一个游戏,如果玩家接触到敌人,玩家就会失去生命。我尝试通过以下方式做到这一点:
if player.rect.colliderect(enemy.rect):
life -= 1
这段代码存在于while循环中,所以它的生命周期不断缩短。我只想让它减少一个生命。
如有任何帮助,我们将不胜感激。
谢谢
您应该包括整个 while
循环以获得正确答案。但通常要在特定条件下跳出循环,您可以使用 break
语句。像这样:
if player.rect.colliderect(enemy.rect):
life -= 1
break
我认为你的问题的根源在于 while 循环在发生单个“碰撞”时循环多次。在这种情况下,您可以考虑添加另一个属性,每次碰撞只允许减少一次生命。
给敌人增加一个属性class。对于这个例子,我们称之为 player_collided
.
那么您的碰撞检查可以更新为:
while ...:
...
if player.rect.colliderect(enemy.rect) and not enemy.player_collided:
life -= 1
enemy.player_collided = True
else:
enemy.player_collided = False
为你的“敌人”添加一个碰撞属性class:
class Enemy(pygame.sprite.Sprite):
def __init__(self, ...):
# [...]
self.collide = False
执行以下逻辑:
如果敌人与玩家发生碰撞并且 self.collide
已设置,什么也不做。
如果敌人与玩家发生碰撞且未设置self.collide
,则设置self.collide = True
并递减life
。
如果敌人没有与玩家发生碰撞,设置self.collide = False
。
while run:
# [...]
for enemy in enemies:
if player.rect.colliderect(enemy.rect):
# If an enemy collides with the player and `self.collide` is set, do nothing.
if not self.collide:
# If an enemy collides with the player and `self.collide` is not set,
# set `self.collide = True` and decrement `life`.
self.collide = True
life -= 1
else:
# If an enemy does not collide with the player, set `self.collide = False`.
self.collide = False
这个逻辑意味着live
只会在敌人第一次击中玩家时递减。敌人必须离开玩家区域才能再次计算碰撞。
所以基本上我正在制作一个游戏,如果玩家接触到敌人,玩家就会失去生命。我尝试通过以下方式做到这一点:
if player.rect.colliderect(enemy.rect):
life -= 1
这段代码存在于while循环中,所以它的生命周期不断缩短。我只想让它减少一个生命。
如有任何帮助,我们将不胜感激。
谢谢
您应该包括整个 while
循环以获得正确答案。但通常要在特定条件下跳出循环,您可以使用 break
语句。像这样:
if player.rect.colliderect(enemy.rect):
life -= 1
break
我认为你的问题的根源在于 while 循环在发生单个“碰撞”时循环多次。在这种情况下,您可以考虑添加另一个属性,每次碰撞只允许减少一次生命。
给敌人增加一个属性class。对于这个例子,我们称之为 player_collided
.
那么您的碰撞检查可以更新为:
while ...:
...
if player.rect.colliderect(enemy.rect) and not enemy.player_collided:
life -= 1
enemy.player_collided = True
else:
enemy.player_collided = False
为你的“敌人”添加一个碰撞属性class:
class Enemy(pygame.sprite.Sprite):
def __init__(self, ...):
# [...]
self.collide = False
执行以下逻辑:
如果敌人与玩家发生碰撞并且
self.collide
已设置,什么也不做。如果敌人与玩家发生碰撞且未设置
self.collide
,则设置self.collide = True
并递减life
。如果敌人没有与玩家发生碰撞,设置
self.collide = False
。
while run:
# [...]
for enemy in enemies:
if player.rect.colliderect(enemy.rect):
# If an enemy collides with the player and `self.collide` is set, do nothing.
if not self.collide:
# If an enemy collides with the player and `self.collide` is not set,
# set `self.collide = True` and decrement `life`.
self.collide = True
life -= 1
else:
# If an enemy does not collide with the player, set `self.collide = False`.
self.collide = False
这个逻辑意味着live
只会在敌人第一次击中玩家时递减。敌人必须离开玩家区域才能再次计算碰撞。