编辑没有。 2
我在函数中做了第二个事件循环来检查是否存在KEYUP事件,现在它可以正常工作。谢谢所有评论的人!
修改
所以我将显示部分与移动的东西分开,并意识到它实际上没有从键盘上取任何新的输入,所以它不知道pg.K_s不再被按下了,但现在我不知道如何从我的函数中获取key_up事件。我应该再次使用event.get吗?
我正在尝试在Pygame中制作游戏,您可以使用WASD来控制角色。我希望所有内容都包含在不同的类和函数中,所以我将角色移出主循环并进入函数。不幸的是,现在每当我按下任何WASD键时,精灵就会无限地向那个方向移动并产生运行时错误。
def moving(self):
counter = 0
loop = pg.key.get_pressed()
for i in range(0, len(loop)):
if loop[i] == 1:
counter += 1
else:
continue
while counter == 1:
pressed = pg.key.get_pressed()
if pressed[pg.K_w]:
if (self.y - 3) >= 0:
self.y -= 3
elif pressed[pg.K_a]:
if (self.x - 3) >= 0:
self.x -= 3
elif pressed[pg.K_s]:
if (self.y + 3) <= 238:
self.y += 3
elif pressed[pg.K_d]:
if (self.x + 3) <= 360:
self.x += 3
self.display.fill((0, 0, 0))
self.display.blit(self.justin, (self.x, self.y))
pg.display.flip()
clock = pg.time.Clock()
clock.tick(100)
counter = 0
loop = pg.key.get_pressed()
for i in range(0, len(loop)):
if loop[i] == 1:
counter += 1
else:
continue
以下是调用移动函数的代码:
while True:
for event in pg.event.get():
if event.type == pg.QUIT:
pg.display.quit()
pg.quit()
elif event.type == pg.KEYDOWN:
if (event.key == pg.K_w or event.key == pg.K_a
or event.key == pg.K_s or event.key == pg.K_d):
self.moving()
老实说,我不知道从哪里开始 - 只要一个按钮停止按下,计数器应该保持为0,因此while循环将关闭,但它只是无限地将精灵发送到边缘屏幕。
答案 0 :(得分:1)
假设您试图在按住鼠标按钮的同时使角色连续移动(如果要使其逐步移动,则只需单独检查按键并在x&y上加/减),最好是放弃计数器,而是在事件循环之外放置以下内容:
keys=pg.key.get_pressed()
if keys[pg.K_w]:
if x >= 0: x -= 3
if keys[pg.K_s]:
if x <= 360: x += 3
if keys[pg.K_a]:
if y >= 0: y -= 3
if keys[pg.K_d]:
if y <= 238: y += 3