Pygame精灵碰撞

loading...


1

我一直致力于在pygame中创建一个小型的太空入侵者风格的游戏 . 然而,我几乎已经到了尽头,如果敌人的船只与我的船发生碰撞,我想这样做,发现碰撞,游戏结束 .

到目前为止,我有用于检测子弹和敌舰发生碰撞的代码,但是当我试图为敌人/玩家碰撞重写它时,它没有按预期工作,所以我认为我做的事情不正确 .

有问题的代码:

for block in block_list:

    player_hit_list = pygame.sprite.spritecollide(block, player_list, True)

    for player in player_hit_list:
        explosion.play()
        block_list.remove(block)
        player_list.remove(player)
        all_sprites_list.remove(block)
        all_sprites_list.remove(player)

    if block.rect.y < +10:
        block_list.remove(block)
        all_sprites_list.remove(block)

完整代码:http://pastebin.com/FShPuR6A

是否有人能够告诉我为什么我的代码不起作用?

非常感谢

1回答

  • 0
    class Block(pygame.sprite.Sprite):
        def __init__(self, color):
            pygame.sprite.Sprite.__init__(self)
            self.image = pygame.image.load("spaceship.png")
            self.rect = self.image.get_rect()
    
        def update(self):
            self.rect.y += 1
    
    class Player(pygame.sprite.Sprite):
        def __init__(self):
            pygame.sprite.Sprite.__init__(self)
            self.x=0
            self.y=0
            self.image = pygame.image.load("alien.png")
            self.rect = self.image.get_rect()
    
        def update(self):
            pos = pygame.mouse.get_pos()
            self.rect.x = pos[0]
    

    乍一看,你有一个Block类,有一张像外星人一样移动的宇宙飞船的照片 . Player类,具有外星人图像,并随鼠标移动 .

    我的建议是重命名课程,以便你知道什么是什么 . 发现错误会更容易 .

    编辑:

    它看起来像你的玩家根本不移动:

    def render(self):
            if (self.currentImage==0):
                screen.blit(self.image, (self.x, self.y))
    

    您通过 self.rect.x 更新播放器,但使用 self.xself.y 进行绘制 .

loading...

评论

暂时没有评论!