在 pygame 中,我正在使用函数“pressed_key”
这是我的代码:
if(pressed_keys[K_y]):
base += 10;
但是当我只按一次它时,“基础”增加了 200ish。我想知道是否有办法增加两次进入之间的时间?
感谢您的帮助!
(ps我真的不知道如何搜索关于这个问题的类似问题。我希望这不是重复的。但如果是的话,请告诉我。我会删除这个问题。再次感谢!)
在 pygame 中,我正在使用函数“pressed_key”
这是我的代码:
if(pressed_keys[K_y]):
base += 10;
但是当我只按一次它时,“基础”增加了 200ish。我想知道是否有办法增加两次进入之间的时间?
感谢您的帮助!
(ps我真的不知道如何搜索关于这个问题的类似问题。我希望这不是重复的。但如果是的话,请告诉我。我会删除这个问题。再次感谢!)
这里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 变量。
我希望你对 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)
有关查看一切如何适合的类似示例,请参阅此答案。
另请参阅:Pygame:key.get_pressed() 与事件队列不一致按住键时使用重复移动。对这些键使用状态轮询效果更好。