首页 > 解决方案 > 我改变了速度以制作破折号,但想在这里添加一些破折号长度限制

问题描述

因此,如果我同时按“左键”或“右键”同时按“L shift”,我会让我的角色(玩家)更快地改变它的速度。问题是,我想让这个“破折号”在达到我设定的极限时停止。我希望我的角色不要一次冲刺超过 400 次。有什么可能的方法我可以用..吗?因为我尝试了很多,但我仍然找不到任何有效的方法。这是设置破折号的主循环的一部分。char 在循环之前定义。

运行时:

clock.tick(20)
    
for event in pygame.event.get():
    keys = pygame.key.get_pressed()  
    mods = pygame.key.get_mods() 
    if event.type == pygame.QUIT:
        run = False
    elif keys[pygame.K_LEFT] and mods & pygame.KMOD_LSHIFT or keys[pygame.K_RIGHT] and mods & pygame.KMOD_LSHIFT:
        print("pressed: SHIFT") 
        char.vel = 20
        #I wanna set dash limit to 400px but evry try sitll is all failled..   
    else:
        char.vel = 5

标签: pythonpygamepygame-surfacepygame-clockpygame-tick

解决方案


对破折号使用实时毫秒限制相当容易。然后,您可以将时间校准到您希望破折号更长的时间。

在下面的代码中,我将此时间限制设置为DASH_TIME_LIMIT. 播放器char有一个名为 的新成员变量char.dash_finish。当破折号开始时,我们将破折号的时间限制放在这里。然后在主循环中,我们检查每一帧以查看当前时间是否在此时间之后,这表明时间限制已过期。

要开始冲刺,首先我们检查它们是否已经冲刺。然后dash_finish时间只是“现在”加上未来的几毫秒。

DASH_TIME_LIMIT = 700 # milliseconds
    
for event in pygame.event.get():
    keys = pygame.key.get_pressed()  
    mods = pygame.key.get_mods() 
    if event.type == pygame.QUIT:
        run = False
    elif keys[pygame.K_LEFT] and mods & pygame.KMOD_LSHIFT or keys[pygame.K_RIGHT] and mods & pygame.KMOD_LSHIFT:
        print("pressed: SHIFT") 
        if ( char.dash_finish == None ):   # Not already dashing?
            char.vel = 20
            char.dash_finish = pygame.time.get_ticks() + DASH_TIME_LIMIT
#    else:
#        char.vel = 5

    # has the dash-time expired?
    time_now = pygame.time.get_ticks()
    if ( char.dash_finish == None ):
        char.vel         = 5
    elif ( time_now > char.dash_finish ):
        # dash has now finished
        char.dash_finish = None
        char.vel         = 5
                
    clock.tick(20)        

使用时间限制比计算玩家每帧遍历的像素数更容易。


推荐阅读