python - 如何在pygame中获取 Sprite 的当前坐标?

标签 python pygame

我正在尝试制作一个简单的游戏,玩家必须躲避敌人或向他们射击。到目前为止,玩家和敌人的部分看起来不错,但我陷入了导弹的困境。我试图弄清楚当按下鼠标左键时如何在玩家旁边生成导弹。所以我正在寻找一种方法来获取玩家的当前坐标,在这些坐标的右侧添加一个,以及如果玩家按下左按钮,导弹的坐标是什么。

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, 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 的边界矩形。它提供了许多位置和大小的虚拟属性。例如,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, 0), RLEACCEL)
        self.rect = self.surf.get_rect(center = pos)

当创建新的Missile对象时,从玩家获取当前坐标。例如:

missile_pos = player.rect.center
new_missile = Missile(missile_pos)

关于python - 如何在pygame中获取 Sprite 的当前坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66602597/

相关文章:

python - 如何禁用 libpng 警告? ( python ,游戏)

macos - 无法导入pygame

python - 如何使用 PyGame 让球从墙上弹起?

python - Django-South DataMigration - 应用程序在 forwards() 中可用但在 backwards() 中不可用?

python - 如何将使用 PIL/pillow 创建的嵌入图像作为电子邮件发送 (Python 3)

python - 游戏 : Why is giving error everytime i quit the snake game?

python - 如何让可移动图像跟随鼠标旋转

python - 集成 Rails 和 Python

Python 多重深度复制行为

Python:一个大的 float 怎么会自动变成 *inf*?