一次按多个键

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一次按多个键相关的知识,希望对你有一定的参考价值。

我正在尝试制作一个双人游戏,每个人移动一个物体,但如果一个人移动他们的物体,另一个人不能。这是我的代码。

running = True
while running:
    if event.type == pygame.KEYDOWN:
        if (event.key == 276):
            bat2.rect.x -= 2
        if (event.key == 275):
            bat2.rect.x += 2
        if (event.key == 97):
            bat1.rect.x -= 1
        if (event.key == 100):
            bat1.rect.x += 1

每个球棒都是不同的对象。有办法吗?

答案

要在PyGame获得多个密钥,你可以做到

while running:

    for event in pygame.event.get():
        if event.type == pygame.QUIT():
            running = False

    # --- after events ---

    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT]: # 276
        bat2.rect.x -= 2
    if keys[pygame.K_RIGHT]: # 275
        bat2.rect.x += 2
    if keys[pygame.K_a]: # 97
        bat1.rect.x -= 1
    if keys[pygame.K_d]: # 100
        bat1.rect.x += 1

你使用pygame.event.get():获取事件,它将更新你可以用pygame.key.get_pressed()得到的特殊列表中的valus然后你可以检查哪些键被按下 - 但是你必须在events之后执行,而不是在pygame.KEYDOWN内部,这只是在按钮改变状态时创建的从“未按下”到“按下”但不是按住它时。


使用KEYDOWN你应该这样做

bat2_move_left = False
bat2_move_right = False
bat1_move_left = False
bat1_move_right = False

while running:

    for event in pygame.event.get():
        if event.type == pygame.QUIT():
            running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT: # 276
                bat2_move_left = True
            if event.key == pygame.K_RIGHT: # 275
                bat2_move_right = True
            if event.key == pygame.K_a: # 97
                bat1_move_left = True
            if event.key == pygame.K_d: # 100
                bat1_move_right = True
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT: # 276
                bat2_move_left = False
            if event.key == pygame.K_RIGHT: # 275
                bat2_move_right = False
            if event.key == pygame.K_a: # 97
                bat1_move_left = False
            if event.key == pygame.K_d: # 100
                bat1_move_right = False

    # --- after events ---

    if bat2_move_left:
        bat2.rect.x -= 2
    if bat2_move_right:
        bat2.rect.x += 2
    if bat1_move_left:
        bat1.rect.x -= 1
    if bat1_move_right:
        bat1.rect.x += 1
另一答案

您需要循环遍历每个循环的每个事件,而不仅仅是第一个循环。尝试将您的if event.type语句移动到另一个循环中,如下所示:

while running:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if (event.key == 276):
                bat2.rect.x -= 2
            if (event.key == 275):
                bat2.rect.x += 2
另一答案

在libgdx中我通常使用:

for(int i=0; i<2; i++)
{
If(Gdx.input.isTouched(i))
//do something
}

“i <2”允许在屏幕上进行两次触摸:i = 0且i = 1。

以上是关于一次按多个键的主要内容,如果未能解决你的问题,请参考以下文章

如何在R中一次按两列对行进行排名?

如何彻底关闭Win7系统的“粘滞键”窗口

确定按钮阵列中的最后一次按下[重复]

全局识别上次按下修饰键的时间

Linux下远程备份上传工程,重启服务器

Contact Form 7 在第一次提交时不起作用,但在第二次按下 sumbit 按钮时它工作正常