pygame键被按下 [英] Pygame key getting pressed

查看:176
本文介绍了pygame键被按下的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

只要按键被按下,对pygame说来运行某些东西的惯用方式是什么?使用pygame.key.get_pressed()[pygame.K_p]==Truepygame.mouse.get_pressed()==(1,0,0)似乎仅在按键或按钮敲动时做出反应.例如,应该使用while循环吗?

What is the idiomatic way of saying to pygame to run something as long as a key is being pressed? With pygame.key.get_pressed()[pygame.K_p]==True or pygame.mouse.get_pressed()==(1,0,0) it seems to react only as the key or the button get strocken. Should one use a while loop for example?

我运行下面的代码,只有敲击按键/按钮,我才能在外壳中打印:

I run the code below and i get print in the shell only upon strocking the key/button:

def main():
done = True
while done:
    for i in pygame.event.get():
        if pygame.key.get_pressed()[pygame.K_a] == 1:
            print "Key a is being pressed..."
        elif i.type == KEYDOWN and i.key == pygame.K_q:
            done = 0
    pygame.display.update()
pygame.quit()
main()

推荐答案

事件KEYDOWN表示键的状态从UP变为DOWN"-并不意味着键一直处于按下状态"

Event KEYDOWN means "key changed state from UP to DOWN" - it doesn't means "key is held pressed all time"

当您开始按下键时-会生成事件KEYDOWN,而pygame.event.get()返回的列表不会为空-并且for循环可以执行if pygame.event.get()

When you start pressing key - it generate event KEYDOWN and pygame.event.get() returns not empty list - and for loop can execute if pygame.event.get()

按住键时-它不会生成事件KEYDOWN-并且pygame.event.get()返回空列表-并且for循环不会执行if pygame.event.get()

When you hold key pressed - it doesn't generate event KEYDOWN - and pygame.event.get() returns empty list - and for loop doesn't execute if pygame.event.get()

您的代码应类似于

running = True
while running:
    # check events 
    for event in pygame.event.get():
        if event.type == KEYDOWN:
            if event.key == pygame.K_q:
               running = False

    # do it outside of `for event` loop
    # it is executed many times 
    if pygame.key.get_pressed()[pygame.K_a]: 
        print "Key is hold pressed..."

    pygame.display.update()

或-当您只需要执行一次操作

or - when you need to execute something only once

key_A_pressed = False

running = True
while running:
    # check events 
    for event in pygame.event.get():
        if event.type == KEYDOWN:
            if event.key == pygame.K_q:
               running = False

            elif event.key == pygame.K_a:
               key_A_pressed = True

               # it is executed only once
               print "Key A - start pressing"

        if event.type == KEYUP:
            if event.key == pygame.K_a:
               key_A_pressed = False

               # it is executed only once
               print "Key A - stop pressing"

    # do it only once - outside of `for event` loop
    # it is executed many times 
    #if pygame.key.get_pressed()[pygame.K_a]: 
    # or
    if key_A_pressed:
        print "Key A is held pressed..."

    pygame.display.update()

这篇关于pygame键被按下的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆