我正在制作一个射击游戏,其中包含可以射击“子弹”的“玩家”。按“ WASD”可以控制播放器的运动,按“空格”可以使“播放器”射击。现在,我希望Pygame能够以不同的速度响应长按的键。例如,每10 ms响应一次“ WASD”,每1000ms响应一次“ Space”。我该怎么办?
我尝试了pygame.key.set_repeat(),并且每个键都会以相同的速度响应。
答案 0 :(得分:0)
pygame.key.set_repeat()
设置整个键盘的延迟,无法区分键。您需要在程序中执行此操作。
一种可能的解决方案是将set_repeat
重复事件之间的延迟设置为您想要在游戏中拥有的最短间隔。对于需要较长时间间隔的键,您需要自己检查是否经过了足够的时间来“接受”事件并允许执行相应的操作。
此示例代码应使您了解我的意思。
import sys
import pygame
#the action you want to perform when the key is pressed. Here simply print the event key
#in a real game situation, this action would differ according to the key value
def onkeypress(event):
print(event.key)
#dict of key constants for which you want a longer delay and their tracking time
#in ms, initialized to 0. Here only the spacebar
repeat1000 = {pygame.K_SPACE : 0}
pygame.init()
screen = pygame.display.set_mode((500, 500))
#sets repeat interval to 10 milliseconds for all keys
pygame.key.set_repeat(10)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.KEYDOWN:
current_time = pygame.time.get_ticks()
if event.key in repeat1000.keys():
if current_time - repeat1000[event.key] > 1000:
repeat1000[event.key] = current_time
onkeypress(event)
elif event.key in [pygame.K_w, pygame.K_a, pygame.K_s, pygame.K_d]:
onkeypress(event)
如果您尝试上面的代码,您会发现如果按住空格键,每秒就会打印出空格键(在我的系统上为32)。另外,如果您按W A S D之一,则每0.01秒就会打印一次对应的键(我的系统上为119、97、115、100)。