Pygame Key事件仅检测到有限数量的键被按下

时间:2015-07-04 15:06:25

标签: python-2.7 pygame

您好我已经使用pygame(python的模块)了一段时间。现在我已经写了一个RPG游戏,其中有多个键同时被按下。似乎在按下时只检测到2或3个按键。如果有人知道如何解决这个问题,那就太好了。试试下面的python 2.7代码,看看你是否遇到同样的问题。感谢

import pygame

def main():
    # Initialise screen
    pygame.init()
    clock = pygame.time.Clock()
    screen = pygame.display.set_mode((150, 50))
    pygame.display.set_caption('Basic Pygame program')

    # Fill background
    background = pygame.Surface(screen.get_size())
    background = background.convert()
    background.fill((250, 250, 250))

    # Display some text
    font = pygame.font.Font(None, 36)
    text = font.render("Hello There", 1, (10, 10, 10))
    textpos = text.get_rect()
    textpos.centerx = background.get_rect().centerx
    background.blit(text, textpos)

    # Blit everything to the screen
    screen.blit(background, (0, 0))
    pygame.display.flip()
    q=0
    w=0
    e=0
    r=0

    #Event loop
    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                return
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_q  : 
                q = 1
            if event.key == pygame.K_w  : 
                w = 1
            if event.key == pygame.K_e  : 
                e = 1
            if event.key == pygame.K_r  : 
                r = 1
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_q  : 
                q = 0
            if event.key == pygame.K_w  : 
                w = 0
            if event.key == pygame.K_e  : 
                e = 0
            if event.key == pygame.K_r  : 
                r = 0
        count = q+w+e+r
        print("Total: "+str(count)+"  q: "+str(q) + "   w: "+str(w)+ "   e: "+str(e)+ "   r: "+str(r))
        clock.tick(30)
        screen.blit(background, (0, 0))
        pygame.display.flip()
if __name__ == '__main__': main()

在这里,我尝试使用pygame.key.get_pressed(),但它似乎仍然无法使用超过3个键被按下。 ) - :

from pygame.locals import * 
import pygame
def main():
    # Initialise screen
    pygame.init()
    clock = pygame.time.Clock()
    screen = pygame.display.set_mode((150, 50))
    pygame.display.set_caption('Basic Pygame program')

    # Fill background
    background = pygame.Surface(screen.get_size())
    background = background.convert()
    background.fill((250, 250, 250))

    # Display some text
    font = pygame.font.Font(None, 36)
    text = font.render("Hello There", 1, (10, 10, 10))
    textpos = text.get_rect()
    textpos.centerx = background.get_rect().centerx
    background.blit(text, textpos)

    # Blit everything to the screen
    screen.blit(background, (0, 0))
    pygame.display.flip()


    #Event loop
    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                return
        q=0
        w=0
        e=0
        r=0
        keys=pygame.key.get_pressed()
        if keys[K_q]  : 
            q = 1
        if keys[K_w]  : 
            w = 1
        if keys[K_e]  : 
            e = 1
        if keys[K_r]  : 
            r = 1

        count = q+w+e+r
        print("Total: "+str(count)+"  q: "+str(q) + "   w: "+str(w)+ "   e: "+str(e)+ "   r: "+str(r))
        clock.tick(30)
        screen.blit(background, (0, 0))
        pygame.display.flip()

if __name__ == '__main__': main(

2 个答案:

答案 0 :(得分:0)

您可以使用'get_pressed',它会为键盘上的每个键提供一个bool值。

http://www.pygame.org/docs/ref/key.html#pygame.key.get_pressed

keys = pygame.key.get_pressed()
    if keys[K_LEFT]:
        go_left()

答案 1 :(得分:0)

这很可能是a hardware issue with your keyboard,而不是你可以在游戏软件中解决的问题。大多数键盘对可以同时按下的键可以读取的键数量有限制(虽然常见的修饰键如Shift和Control通常是单独处理的)。在笔记本电脑或低端台式键盘上并不常见,一次只能支持两个普通(非修改器)按键。游戏键盘(以及一般的高端键盘)将支持更多,但通常仍有一些限制。如果您按下的键多于键盘可以处理的键,它将忽略后面的按键(称为“卡纸”)或导致键盘报告其他键的额外按键(称为“重影”)。

如果你自己设计游戏,这可能是一个重要的事情,因为它会影响你的玩家,而不仅仅是你!您可能希望确保不以低端键盘用户无法有效播放的方式设计游戏界面。如果你的UI不能在没有同时按下多个键的情况下工作,你可能想要将一些键分配移动到修改键,如Shift和Control,当与其他键同时按下时,它们更有可能被支持。随着第一人称射击游戏的普及,WASD键也可能在某些键盘上得到特殊处理。