1

在 pygame 中,我正在使用函数“pressed_key”

这是我的代码:

if(pressed_keys[K_y]):
    base += 10;

但是当我只按一次它时,“基础”增加了 200ish。我想知道是否有办法增加两次进入之间的时间?

感谢您的帮助!

(ps我真的不知道如何搜索关于这个问题的类似问题。我希望这不是重复的。但如果是的话,请告诉我。我会删除这个问题。再次感谢!)

4

3 回答 3

2

这里http://www.pygame.org/docs/ref/key.html#pygame.key.set_repeat

pygame.key.set_repeat(delay, interval): return None

还:

pygame.key.get_pressed()[K_y]: return bool

另一种方法是获取您接受“按键”的时间,然后等待再次接受它:

import time
interval = 100 #you set your interval in miliseconds
lasttime = 0

while 1:
    draw() #draw routine
    events() #another events
    now = time.time() #save in one variable if you are going to test against more than one, reducing the number of time.time() calls
    if(pressed_keys[K_y] and (now-lasttime)>interval):
        lasttime = now
        base += 10

time.time() 以浮点数形式返回纪元以来的时间(以秒为单位)。纪元是时间开始的点。当年 1 月 1 日,0 时,“自纪元以来的时间”为零。对于 Unix,纪元是 1970 年。

知道了这一点,您现在就获得了与上次保存时间相比的时间:现在-上次。
当这个 delta 大于间隔时,您可以继续您的活动,不要忘记更新您的 lasttime 变量。

于 2012-08-14T16:55:18.917 回答
1

我希望你对 pygame 有足够的了解来使用时钟

(为简单起见,我们会说所需的时间间隔为一秒)

一个简单的解决方案是每秒检查一次输入,使用一个简单的计数器和 pygame 时钟。

首先在主循环之外启动时钟和计数器。此外,添加一个布尔变量来确定是否在这一秒内按下了键。

FRAMERATE = 30 #(The framerate used in this example is 30 FPS)
clock = pygame.time.Clock()
counter = 0
not_pressed = True

然后在主循环中,你要做的第一件事就是增加计数器,然后勾选时钟

while argument:
    counter+=1
    clock.tick(FRAMERATE)

那么你有你的代码,一个if查看按钮是否被按下的语句:

if not_pressed:
    if(pressed_keys[K_y]):
        not_pressed=False
        base += 10
#Rest of code:
if(pressed_keys[K_up]):

最后,在主循环结束时,添加一个检查器以not_pressed每秒将布尔值切换回 True:

if counter == FRAMERATE:
    counter=0
    not_pressed=True

这应该允许程序每秒只从用户那里获取一次输入。要更改间隔,只需更改if counter == FRAMERATE:行。

  • if counter == FRAMERATE:将是 1 秒
  • if counter == (FRAMERATE*2):将是 2 秒
  • if counter == int(FRAMERATE/4):将是四分之一秒*

*注意-确保您将FRAMERATE除以数字,通过使用int()包围除法或使用整数除法转换为整数:(FRAMERATE//4)

有关查看一切如何适合的类似示例,请参阅此答案

于 2012-08-15T13:38:17.773 回答
0

另请参阅:Pygame:key.get_pressed() 与事件队列不一致按住键时使用重复移动。对这些键使用状态轮询效果更好。

于 2012-08-17T20:01:40.983 回答