如何让我的对象在pygame中通过按住按钮移动?

2024-05-18 12:23:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我试过用这种东西,但没用。在

while running:
keys = pygame.key.get_pressed()  #checking pressed keys
if keys[pygame.K_UP]:
    y1 -= 1
if keys[pygame.K_DOWN]:
    y1 += 1

这是我现在的密码。我试着用另一种方法,因为上面的方法对我不起作用。它一次只按一个按钮。在

^{pr2}$

编辑:

我现在有密码了。我的对象仍然只在我反复按按钮时移动,而当我按住它时不会移动。在

def game(spaceX, spaceY):

    while True:
        screen.fill(black)
        screen.blit(spaceship, (spaceX, spaceY))
        pygame.display.flip()
        keys = pygame.key.get_pressed()

        for event in pygame.event.get():
            if keys[pygame.K_LEFT]:
                spaceX = spaceX - 5
                game(spaceX, spaceY)

            elif keys[pygame.K_RIGHT]:
                spaceX = spaceX + 5
                game(spaceX, spaceY)

Tags: 方法keygame密码getifkeysscreen
3条回答

尝试将密钥添加到pygame for循环中。所以它应该看起来像这样。。。在

while running:
for event in pygame.event.get():
    keys = pygame.key.get_pressed()  #checking pressed keys
        if keys[pygame.K_UP]:
        y1 -= 1

        if keys[pygame.K_DOWN]:
        y1 += 1

这个问题的一个解决方案是使用set_repeat函数

pygame.key.set_repeat(True)

这将生成多个KEYDOWN事件。在

有两种方法可以检查键输入,如果它们在事件队列中,或者检查它们的当前状态。在

事件队列

当按键被按下或重新设定时,它们会被放入事件队列中,因此您无法直接判断按键是否被按住。有两种解决方法:

  1. 在进入主循环之前调用pygame.key.set_repeat(True)。这将重复地将KEYDOWN事件放入事件队列中,只要它保持不变。

  2. 引入速度变量。当用户按下按键时,将速度设置为某个速度;当用户抬起按键时,将速度设置为0。

例如:

for event in pygame.event.get():
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_LEFT:
            velocity_x = -5
        elif event.key == pygame.K_RIGHT:
            velocity_x = 5
    elif event.type == pygame.KEYUP:
        if event.key == pygame.K_LEFT:
            velocity_x = 0
        elif event.key == pygame.K_RIGHT:
            velocity_x = 0

position_x += velocity_x

状态检查

您可以通过调用pygame.key.get_pressed()来获得密钥的当前状态。您必须调用pygame.event中的一个函数,以便pygame执行一些必需的内部操作,因此如果您不想使用事件队列,请使用pygame.event.pump()。如果你不这么做,你的操作系统会认为pygame已经崩溃,导致游戏没有响应。不过,您通常希望处理pygame.QUIT事件,这样用户就可以退出了。在

^{pr2}$

相关问题 更多 >

    热门问题