Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 巨蟒-精灵追逐另一个精灵_Python_Oop_Pygame_Sprite - Fatal编程技术网

Python 巨蟒-精灵追逐另一个精灵

Python 巨蟒-精灵追逐另一个精灵,python,oop,pygame,sprite,Python,Oop,Pygame,Sprite,我正在使用pygame开发一款“类似太空入侵者”的游戏。目前,我的代码是功能性的,我已经完成了游戏的基础知识。 现在我想让敌人向我的玩家移动,下面是我的代码: class createShip(imports.pygame.sprite.Sprite): def __init__(self): imports.pygame.sprite.Sprite.__init__(self) self.image = loader.joueur_image

我正在使用
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)
class createShip(imports.pygame.sprite.sprite):
定义初始化(自):
imports.pygame.sprite.sprite.\uuuu init\uuuu(self)
self.image=loader.jouer\u image
self.rect=loader.jouer\u rect
self.rect.x=constants.screen_width/2-self.rect.width/2
self.rect.y=constants.screen_height-self.rect.height-20
def更新(自我):
如果(imports.pygame.key.get_pressed()[imports.pygame.K_LEFT]==True):
self.rect.x-=constants.speed\u船
elif(imports.pygame.key.get_pressed()[imports.pygame.K_RIGHT]==True):
self.rect.x+=constants.speed\u船
如果自校正x<0:
self.rect.x=0
elif self.rect.x>constants.screen_width-self.rect.width:
self.rect.x=constants.screen_width-self.rect.width
类createDebuy(imports.pygame.sprite.sprite):
定义初始化(自):
imports.pygame.sprite.sprite.\uuuu init\uuuu(self)
self.image=imports.pygame.Surface([50,50])
self.image.fill((0,0,0))
self.rect=self.image.get_rect()
自校正y=0
self.rect.x=imports.random.randint(constants.screen_width/2-350,constants.screen_width/2+350)
def更新(自我):
self.rect.y+=imports.random.randint(constants.speed\u敌军-8,constants.speed\u敌军+2)
如果self.rect.y>constants.screen_高度-35:
自校正y=0
self.rect.x=imports.random.randint(constants.screen_width/2-350,constants.screen_width/2+350)
这是我的问题。我不想在游戏循环中对移动部分进行编码,调用sprite update方法更简单。 所以我希望在我的敌方类中调用我的ship类来获得
ship.rect.x
ship.rect.y
,但显然它不起作用,因为没有创建我的ship对象

我找不到办法把我的飞船坐标放到我的敌舰上。我想做另一个继承,但必须有一个更简单的方法来实现这一点。

(我回答,因为我没有评论的名声,否则我会评论) 对于我正在编写的程序,我很快也会遇到同样的问题。 我的猜测是先对玩家进行istantation,然后将引用istance的变量作为参数传递给createnemey类,如下所示:

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类)