我正在制作一个平台游戏并制作一个简单的重力版本,我需要在2秒左右跳跃(空格键)时重力打开。基本上'ychange'改变每帧字符的y轴位置(如果ychange = 3,则每帧下降3个像素)。它总是被设置为6,所以他每帧落下6帧,直到他遇到碰撞的东西,让他跳跃ychange设置为-6或-7,这使得他每帧增加6或7个像素。
我的问题是,我怎样才能延迟从ychange = -6切换到ychange = 6跳转
例如:
当JUMP: ychange = -6 延迟2-3秒 ychange = 6
我显然已经尝试过time.sleep和pygame.time.wait,但是他们会暂停程序直到等待结束,这显然不是很好。
跳转的代码是:
while not gameExit:
for event in pygame.event.get(): # Binds
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
xchange -= 3
if event.key == pygame.K_d:
xchange += 3
if event.key == pygame.K_SPACE: # SPACEBAR/JUMP
ychange = -6
time.sleep(2)
ychange = 6
if event.type == pygame.KEYUP:
if event.key == pygame.K_a or event.key == pygame.K_d:
xchange = 0
他们“if event.key == pygame.K_SPACE”是跳跃部分,其余是其他绑定。
这是一个使用time.sleep命令的例子,它暂停整个程序直到延迟结束。
有什么想法吗?
重述:
问题:延迟暂停程序
尝试:time.sleep,pygame.time.wait
问题:如何获得不会暂停整个程序的延迟
答案 0 :(得分:1)
使用pygame.time.get_ticks()
获取玩家按空格的时间,然后将布尔标志设置为true。然后从原始时间开始一帧一次,直到2秒为止,此时你将ychange设置为6并再次将标志设置为false。
或者像其中一条评论所暗示的那样查找线程。
伪代码:
flag = False; # do this before the game loop starts
if event.type == pygame.KEYUP:
# checking flag prevents resetting the timer
if flag == False and event.key == pygame.K_w:
starttime = pygame.time.get_ticks()
ychange = -6
flag = True
# wait 2000 milliseconds before executing this
if flag == True and pygame.time.get_ticks() - starttime >= 2000:
ychange = 6
flag = False