【问题标题】:Pygame Sprite not updatingPygame Sprite 不更新
【发布时间】:2013-11-23 05:55:27
【问题描述】:

我正在尝试使用向上和向下箭头在乒乓球游戏中移动桨。我通过一个事件处理循环来做到这一点。下面是事件处理循环的代码:

    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

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

【问题讨论】:

  • 你能发布完整程序的源代码吗?
  • 到目前为止你尝试过什么样的调试?事件处理程序中是否有任何打印语句以验证是否已达到坐标调整逻辑?
  • 我在事件驱动循环中添加了打印语句,以查看它是否能够识别按键向上和按键向下事件。按键确实打印出来了,但是拨片不动,很混乱。

标签: python pygame


【解决方案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 进行更新,以便它移动实际的矩形。

【讨论】:

  • 我进行了更改,但桨仍然不动。我将打印语句放在事件处理循环中,以查看它是否识别出我是按向上键还是向下键,它确实如此。这意味着它可能与我的 update() 方法有关,但我不确定它有什么问题
【解决方案2】:

这是我如何让它工作的:

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

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

【讨论】:

    猜你喜欢
    • 2012-06-30
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 2022-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多