Python精灵追逐另一个精灵

2024-05-15 06:23:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用pygame开发一款“类似太空入侵者”的游戏。目前我的代码是功能性的,我已经完成了游戏的基础知识。 所以现在我想让敌人朝我的玩家移动,这是我的代码:

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类来获得ship.rect.x和{},但显然它没有工作,因为我的ship对象没有被创建。在

我找不到办法把我的飞船坐标放在敌方舱里。我想做另一个继承,但必须有一个更容易实现的方法。在


Tags: rectimageself游戏initdefwidthscreen
1条回答
网友
1楼 · 发布于 2024-05-15 06:23:48

(我回答是因为我没有资格评论,否则我会评论) 对于我正在编写的程序,我很快就会遇到同样的问题。 我的猜测是istantify播放器,然后将引用istance的变量作为参数传递给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

然后,在循环开始之前:

^{pr2}$

实际上,我以前做过这个,而且它是有效的,只是不是通过子类化游戏精灵精灵精灵(我创建了自己的玩家类)。在

相关问题 更多 >

    热门问题