我正在游戏中制作游戏,并试图想办法让敌人爆炸。
敌人有他们的班级:
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)
并没有吸引被枪杀的敌人。
但是,爆炸实际上发生在玩家身上。有人会怎样以更好的方式重写这个?
答案 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中的精灵。我已经颠倒了你的小组的顺序,使逻辑变得更简单。