Pygame Sprite没有更新

时间:2013-11-23 05:55:27

标签: python pygame

我正试图通过使用向上和向下箭头在Pong游戏中移动桨。我是通过事件处理循环来完成的。以下是事件处理循环的代码:

    for event in PE.get():
       if event.type == PG.KEYDOWN:
          keystate = PG.key.get_pressed()
          if event.key == PG.K_ESCAPE:
              done = True
          if keystate[PL.K_UP]:
              rightPaddle.update(-10)
          if keystate[PL.K_DOWN]:
              rightPaddle.update(10)
       if event.type == PG.QUIT:
          done = True

更新功能如下所示:

   def update(self, move):
       self.toplefty += move

这是PaddleSprite类:

    def __init__(self, x, y):
        PG.sprite.Sprite.__init__(self)
        self.image = PG.Surface([15,100])
        self.topleftx = x
        self.toplefty = y
        self.rect = self.image.get_rect
        self.rect.move_ip(self.topleftx, self.toplefty)

    def draw(self, surface):
        surface.fill(PINK, self.rect)

    def update(self, move):
        self.toplefty += move

简单地说,桨的更新功能(基本上是一个矩形)根据点击向上或向下箭头的次数将矩形的左上角移动到新的y位置。每个向上或向下箭头在正方向或负方向上使桨叶增加10的距离。但是,在我的程序中,当我向上或向下按压时,桨叶完全没有移动。谁能告诉我为什么?此外,我可以在按住向上或向下键的同时移动拨片,而不是多次按下它来移动它吗?

2 个答案:

答案 0 :(得分:1)

看起来您已经结合了两种检查输入的方法。他们似乎有冲突。 我们来看看:

for event in PE.get():

这称为事件循环,pygame所做的,是存储已发生的所有事件的输入队列,而get()则从队列中弹出值。

另一种方法是PG.key.get_pressed()

这是一种更多的硬件方法,因为它返回一组按钮状态。

要解决此问题,建议您删除get_pressed()调用以及keystate []检查,并将其替换为event.key == PG.K_UP

编辑:

似乎你的错误是设置self.toplefty的变量,但是使用self.rect来绘制。您应该使用self.rect.move_ip进行更新,以便移动实际的rect。

答案 1 :(得分:0)

以下是我如何使用它:

   def update(self, move):
       self.rect.centerx += 0
       self.rect.centery += move

基本上,问题必须是更新,因为事件驱动的循环识别我正在向上或向下按压。所以我得到了精灵的Rect对象,并在垂直轴上移动了它的中心。感谢所有评论或回答的人!