Python - 精灵追逐另一个精灵
Python - Sprite chasing another sprite
我正在使用 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)
这是我的问题。我不想在我的游戏循环中编写移动部分的代码,调用 sprite 更新方法更简单。
所以我希望在我的敌人 class 中调用我的船 class 来获得 ship.rect.x
和 ship.rect.y
,但显然它没有用,因为我的船对象没有创建.
我找不到方法让我的飞船坐标进入我的敌人 class。我想再做一次继承,但必须有更简单的方法来实现。
(我回答是因为我没有发表评论的名誉,否则我会发表评论)
对于我正在编写的程序,我很快就会遇到同样的问题。
我的猜测是实例化玩家,然后将引用距离的变量作为参数传递给 CreateEnemey class,大致如下:
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()
我以前确实这样做过并且它有效,只是不是通过 subclassing pygame.sprite.Sprite(我创建了自己的播放器 class)。
我正在使用 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)
这是我的问题。我不想在我的游戏循环中编写移动部分的代码,调用 sprite 更新方法更简单。
所以我希望在我的敌人 class 中调用我的船 class 来获得 ship.rect.x
和 ship.rect.y
,但显然它没有用,因为我的船对象没有创建.
我找不到方法让我的飞船坐标进入我的敌人 class。我想再做一次继承,但必须有更简单的方法来实现。
(我回答是因为我没有发表评论的名誉,否则我会发表评论) 对于我正在编写的程序,我很快就会遇到同样的问题。 我的猜测是实例化玩家,然后将引用距离的变量作为参数传递给 CreateEnemey class,大致如下:
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()
我以前确实这样做过并且它有效,只是不是通过 subclassing pygame.sprite.Sprite(我创建了自己的播放器 class)。