如何在我的 pygame 游戏中检测 Hitbox 并获得它的输出?
How can I detect hitbox in my pygame game and get an output for it?
我有我的代码。
#Player Spawn
player = Player() # spawn player
player.rect.y = 0 # go to y
player_list = pygame.sprite.Group()
player_list.add(player)
#Asteoriden spawn
enemy = Enemy()
enemy.rect.y = 150
enemy.rect.x = 1000
enemy_list = pygame.sprite.Group()
enemy_list.add(enemy)
running = True
while running:
pygame.display.update()
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
#more code
for player in player_list:
if player.rect.colliderect(enemy):
print("hit")
win.blit(bg, (0,0))
player.update()
enemy.update()
enemy_list.draw(win)
player_list.draw(win)
pygame.display.flip()
Player () 和 Enemy () 是 类 我的应该碰撞的对象。但是如果我 运行 现在的代码会显示很多 'hit' 但我只想显示一个 'hit' 。我的整个控制台都是'hit'。如果我以后想用一个函数替换 'hit',它会 运行 比它应该的更频繁。
将碰撞存储在列表中:
collisions = []
每当敌人击中玩家时,将敌人和玩家的元组保存在列表中。当敌人和玩家不再命中时移除元组。当敌人和玩家发生碰撞但玩家和敌人的元组不在列表中时,只需打印“命中”(或调用函数)。这意味着敌人和玩家刚刚击中但之前没有击中:
while running:
# [...]
for enemy in enemy_list:
for player in player_list:
if player.rect.colliderect(enemy):
if not (player, enemy) in collisions:
collisions.append((player, enemy))
print("hit")
else:
if (player, enemy) in collisions:
collisions.remove((player, enemy))
# [...]
我有我的代码。
#Player Spawn
player = Player() # spawn player
player.rect.y = 0 # go to y
player_list = pygame.sprite.Group()
player_list.add(player)
#Asteoriden spawn
enemy = Enemy()
enemy.rect.y = 150
enemy.rect.x = 1000
enemy_list = pygame.sprite.Group()
enemy_list.add(enemy)
running = True
while running:
pygame.display.update()
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
#more code
for player in player_list:
if player.rect.colliderect(enemy):
print("hit")
win.blit(bg, (0,0))
player.update()
enemy.update()
enemy_list.draw(win)
player_list.draw(win)
pygame.display.flip()
Player () 和 Enemy () 是 类 我的应该碰撞的对象。但是如果我 运行 现在的代码会显示很多 'hit' 但我只想显示一个 'hit' 。我的整个控制台都是'hit'。如果我以后想用一个函数替换 'hit',它会 运行 比它应该的更频繁。
将碰撞存储在列表中:
collisions = []
每当敌人击中玩家时,将敌人和玩家的元组保存在列表中。当敌人和玩家不再命中时移除元组。当敌人和玩家发生碰撞但玩家和敌人的元组不在列表中时,只需打印“命中”(或调用函数)。这意味着敌人和玩家刚刚击中但之前没有击中:
while running:
# [...]
for enemy in enemy_list:
for player in player_list:
if player.rect.colliderect(enemy):
if not (player, enemy) in collisions:
collisions.append((player, enemy))
print("hit")
else:
if (player, enemy) in collisions:
collisions.remove((player, enemy))
# [...]