我正试图通过使用向上和向下箭头在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的距离。但是,在我的程序中,当我向上或向下按压时,桨叶完全没有移动。谁能告诉我为什么?此外,我可以在按住向上或向下键的同时移动拨片,而不是多次按下它来移动它吗?
答案 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对象,并在垂直轴上移动了它的中心。感谢所有评论或回答的人!