问题描述
我正在尝试制作一个简单的游戏,玩家必须躲避敌人或向他们射击。到目前为止,玩家和敌人的部分看起来不错,但我被困在导弹的事情上。我试图弄清楚如何在按下鼠标左键时在玩家旁边产生导弹。所以我正在寻找一种方法来获取玩家的当前坐标,在这些坐标的右侧添加一个,如果玩家按下左按钮,导弹的坐标是什么。
class Player(pg.sprite.Sprite):
def __init__(self):
super(Player,self).__init__()
self.surf = pg.image.load("Player.png").convert()
self.surf = pg.transform.smoothscale(self.surf,(75,75))
self.surf.set_colorkey((255,255,255),RLEACCEL)
self.rect = self.surf.get_rect()
def move(self,pressed_keys):
if pressed_keys[K_UP]:
self.rect.move_ip(0,-10)
if pressed_keys[K_DOWN]:
self.rect.move_ip(0,10)
if pressed_keys[K_LEFT]:
self.rect.move_ip(-10,0)
if pressed_keys[K_RIGHT]:
self.rect.move_ip(10,0)
if self.rect.left < 0:
self.rect.left = 0
if self.rect.right > SCREEN_WIDTH:
self.rect.right = SCREEN_WIDTH
if self.rect.top <= 0:
self.rect.top = 0
if self.rect.bottom >= SCREEN_HEIGHT:
self.rect.bottom = SCREEN_HEIGHT
class Missile(pg.sprite.Sprite):
def __init__(self):
super(Missile,self).__init__()
self.surf = pg.image.load("Missile.png").convert()
self.surf = pg.transform.smoothscale(self.surf,(20,20))
self.surf.set_colorkey((0,0),RLEACCEL)
self.rect = self.surf.get_rect(center=)
def launch(self):
self.rect.move_ip(5,0)
if self.rect.left < 0:
self.kill()
解决方法
坐标存储在 rect
属性中。 rect
属性是一个 pygame.Rect
对象,指定 Sprite 的边界矩形。它为位置和大小提供了许多虚拟属性。例如,精灵的左上角是 self.rect.topleft
或 (self.rect.x
,self.rect.y
)。
我建议将初始坐标传递给 Missile
对象:
class Missile(pg.sprite.Sprite):
def __init__(self,pos):
super(Missile,self).__init__()
self.surf = pg.image.load("Missile.png").convert()
self.surf = pg.transform.smoothscale(self.surf,(20,20))
self.surf.set_colorkey((0,0),RLEACCEL)
self.rect = self.surf.get_rect(center = pos)
在创建新的 Missile
对象时从玩家获取当前坐标。例如:
missile_pos = player.rect.center
new_missile = Missile(missile_pos)