如何在组中找到精灵的位置?

时间:2014-12-17 17:22:23

标签: python pygame

我正在游戏中制作游戏,并试图想办法让敌人爆炸。

敌人有他们的班级:

class Enemy(pygame.sprite.Sprite):

    def __init__(enemy, x, y):
        pygame.sprite.Sprite.__init__(enemy)
        enemy.image = ENEMYIMAGE.convert()
        enemy.mask = pygame.mask.from_surface(enemy.image)
        enemy.rect = enemy.image.get_rect()
        enemy.rect.x = x
        enemy.rect.y = y

在main()中重复调用,然后添加到组中:

enemy_group = pygame.sprite.Group()
if spawn_ctr % 700 == 0:
        enemy = Enemy(WINDOWWIDTH, (random.randint(0, WINDOWHEIGHT - ENEMYHEIGHT)))
        enemy_group.add(enemy)
    spawn_ctr += 1

激光器类似,也就是说,有一个激活类在main()中调用。调用类时,激光被添加到组中。

我试图让敌人爆炸:

if pygame.sprite.groupcollide(weapon_group, enemy_group, False, True):
    EXPLOSIONSOUND.play()
    EXPLOSIONANIM.play()
    EXPLOSIONANIM.blit(screen, (weapon.rect.x, weapon.rect.y))

这确实会从群组中移除敌人,使其成为

enemy_group.draw(screen)

并没有吸引被枪杀的敌人。

但是,爆炸实际上发生在玩家身上。有人会怎样以更好的方式重写这个?

1 个答案:

答案 0 :(得分:0)

尝试使用pygame.sprite.groupcollide的返回值对结果进行排序。而不是你现在拥有的,试试这个:

for enemy,colls in pygame.sprite.groupcollide(enemy_group, weapon_group, True, False):
    if colls:
        EXPLOSIONSOUND.play()
        EXPLOSIONANIM.play()
        EXPLOSIONANIM.blit(screen, enemy.rect.center)

pygame.sprite.groupcollide返回一个字典,其键是组1中的每个精灵,其值是它们重叠的组2中的精灵。我已经颠倒了你的小组的顺序,使逻辑变得更简单。