我正试图通过使用向上和向下箭头在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 回答
看起来你已经结合了两种检查输入的方法 . 他们似乎有冲突 . 我们来看看:
这被称为事件循环,pygame所做的,是存储已发生的所有事件的输入队列,而get()从队列中弹出值 .
另一种方法是
PG.key.get_pressed()
.这是一种更多的硬件方法,因为它返回一组按钮状态 .
要解决此问题,我建议删除
get_pressed()
调用以及keystate []检查并将其替换为event.key == PG.K_UP
.编辑:
看来您的错误是设置self.toplefty的变量,但使用self.rect绘制 . 您应该使用self.rect.move_ip进行更新,以便移动实际的rect .
以下是我如何使用它:
本质上,问题必须是更新,因为事件驱动的循环识别我正在按下或按下 . 所以我得到了精灵的Rect对象,并在垂直轴上移动了它的中心 . 感谢所有评论或回答的人!