首页 文章

Python - Sprite追逐另一个精灵

提问于
浏览
1

我正在使用 pygame 开发一个"Space Invaders like"游戏 . 目前我的代码功能正常,我想让敌人移向我的播放器,这是我的代码:

class createShip(imports.pygame.sprite.Sprite):
    def __init__(self):
        imports.pygame.sprite.Sprite.__init__(self)
        self.image = loader.joueur_image
        self.rect = loader.joueur_rect
        self.rect.x = constantes.screen_width/2 - self.rect.width/2
        self.rect.y = constantes.screen_height - self.rect.height - 20

    def update(self):
        if (imports.pygame.key.get_pressed()[imports.pygame.K_LEFT] == True):
            self.rect.x -= constantes.speed_ship
        elif (imports.pygame.key.get_pressed()[imports.pygame.K_RIGHT] == True):
            self.rect.x += constantes.speed_ship
        if self.rect.x < 0:
            self.rect.x = 0
        elif self.rect.x > constantes.screen_width - self.rect.width:
            self.rect.x = constantes.screen_width - self.rect.width

class createEnemy(imports.pygame.sprite.Sprite):
    def __init__(self):
        imports.pygame.sprite.Sprite.__init__(self)
        self.image = imports.pygame.Surface([50, 50])
        self.image.fill((0, 0, 0))
        self.rect = self.image.get_rect()
        self.rect.y = 0
        self.rect.x = imports.random.randint(constantes.screen_width/2 - 350, constantes.screen_width/2 + 350)

    def update(self):
        self.rect.y += imports.random.randint(constantes.speed_enemy - 8, constantes.speed_enemy + 2)
        if self.rect.y > constantes.screen_height - 35:
            self.rect.y = 0
            self.rect.x = imports.random.randint(constantes.screen_width/2 - 350, constantes.screen_width/2 + 350)

这是我的问题 . 我不想在游戏循环中编码移动部分,调用精灵更新方法更简单 . 所以我希望在我的敌人类里面调用我的船只类来获得 ship.rect.xship.rect.y ,但显然它没有创建.776153_ t .

我无法找到一种方法让我的船只坐在我的敌人类内 . 我想过做另一个继承,但必须有一个更简单的方法来实现它 .

1 回答

  • 0

    (我回答是因为我没有评论的声誉,否则我会发表评论)我很快会对我正在编写的程序遇到同样的问题 . 我的猜测是将播放器变为现实,然后将引用isiance的变量作为参数传递给CreateEnemey类,具体如下:

    class createShip(imports.pygame.sprite.Sprite):
        def __init__(self):
            imports.pygame.sprite.Sprite.__init__(self)
            pass
    
    class createEnemy(imports.pygame.sprite.Sprite):
        def __init__(self, player):
            imports.pygame.sprite.Sprite.__init__(self)
            self.x_player = player.rect.x
            self.y_player = player.rect.y
    

    然后,在循环开始之前:

    player = createShip()
    

    我之前实际上已经做过这个并且它可以工作,而不是通过继承pygame.sprite.Sprite(我创建了自己的Player类) .

相关问题