如何获得键盘输入pygame的?(How to get keyboard input in pyga

2019-08-31 08:06发布

我在pygame的1.9.2做一个游戏。 这是一个简单的faily游戏中船坏人谁慢慢向下移动攻击的五列之间移动。 我试图让这个船左右移动与左,右箭头键。 这里是我的代码:

keys=pygame.key.get_pressed()
if keys[K_LEFT]:
    location-=1
    if location==-1:
        location=0
if keys[K_RIGHT]:
    location+=1
    if location==5:
        location=4

它的工作原理太清楚了。 船移动太快。 这几乎是不可能把它移动只有一个位置,向左或向右。 我怎样才能使它所以只船每次按键时移动一次?

Answer 1:

你可以从pygame的事件,然后留意的KEYDOWN事件,而不是在寻找通过返回键get_pressed()它给你钥匙当前按下,而KEYDOWN事件显示哪些键是上压下该帧 )。

什么是你的代码,现在发生的事情是,如果你的游戏在30fps的渲染,你按住左箭头键半秒钟,你不更新其位置的15倍。

events = pygame.event.get()
for event in events:
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_LEFT:
            location -= 1
        if event.key == pygame.K_RIGHT:
            location += 1

为了支持连续运动,同时一键被按下,你就必须建立某种限制,无论是基于游戏循环的强制最大帧速率或通过计数器只允许你的每一个这么多蜱移动环。

move_ticker = 0
keys=pygame.key.get_pressed()
if keys[K_LEFT]:
    if move_ticker == 0:
        move_ticker = 10
        location -= 1
        if location == -1:
            location = 0
if keys[K_RIGHT]:
    if move_ticker == 0:   
        move_ticker = 10     
        location+=1
        if location == 5:
            location = 4

游戏循环中的某处,然后你会做这样的事情:

if move_ticker > 0:
    move_ticker -= 1

这样做只会让你移动一次,每10帧(所以,如果你移动时,股票被设置为10,并在10帧它可以让你再次移动)



Answer 2:

import pygame
pygame.init()
pygame.display.set_mode()
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit(); #sys.exit() if sys is imported
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_0:
                print("Hey, you pressed the key, '0'!")
            if event.key == pygame.K_1:
                print("Doing whatever")



在注意到K_0和K_1并不是唯一的钥匙,看到所有的人,看到pygame的文档,否则,打tab键入后

pygame的。

(注意,pygame的)之后进入空闲程序。 请注意,K个必须是大写。 还要注意的是,如果你不给pygame的显示尺寸(没有传递参数),那么它会自动使用计算机屏幕/显示器的大小。 编码愉快!



Answer 3:

试试这个:

keys=pygame.key.get_pressed()
if keys[K_LEFT]:
    if count == 10:
        location-=1
        count=0
    else:
        count +=1
    if location==-1:
        location=0
if keys[K_RIGHT]:
    if count == 10:
        location+=1
        count=0
    else:
        count +=1
    if location==5:
        location=4

这将意味着你只能移动的时间的1/10。 如果仍然转到快,你可以尝试增加您设定的数值“计数”了。



Answer 4:

仅供参考,如果你想确保船舶不熄灭的屏幕,

location-=1
if location==-1:
    location=0

你也许可以更好地利用

location -= 1
location = max(0, location)

这样,如果它跳过-1程序不破



Answer 5:

您应该使用clock.tick(10)中所陈述的文档 。



Answer 6:

以上问题都太complexicated我只想0.1而不是1这种改变变量的答案使船慢,如果这仍然是太快了0.01,这使得船慢100倍尝试这种改变的变量10倍

keys=pygame.key.get_pressed()
if keys[K_LEFT]:
    location -= 0.1 #or 0.01
    if location==-1:
    location=0
if keys[K_RIGHT]:
    location += 0.1 #or 0.01
    if location==5:
        location=4


文章来源: How to get keyboard input in pygame?