Python 我改变了速度来做短跑,但想在这里增加一些短跑长度限制

Python 我改变了速度来做短跑,但想在这里增加一些短跑长度限制,python,pygame,pygame-surface,pygame-clock,pygame-tick,Python,Pygame,Pygame Surface,Pygame Clock,Pygame Tick,所以我让我的角色(玩家)在同时按“左键”或“右键”的同时按“L shift”可以更快地改变速度。 问题是,我想让这个“冲刺”在达到我设定的极限时停止。我希望我的角色不要一次冲刺超过400米。有什么可能的方法我可以用。。?因为我试了很多,但还是找不到任何有效的。 这是我的主回路中设置破折号的部分。char在循环之前定义 运行时: clock.tick(20) for event in pygame.event.get(): keys = pygame.key.get_presse

所以我让我的角色(玩家)在同时按“左键”或“右键”的同时按“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

不需要测量像素,您可以创建一个名为
dash\u count
的变量,首先将其设置为零,并在字符出现破折号时使其增加1。这可以通过while循环实现:

while dash_count <= 400:
     pass
     # make your character dash over here

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

在下面的代码中,我将此时间限制设置为
DASH\u time\u limit
。播放器
char
有一个名为
char.dash\u 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)        

使用时间限制比计算播放器每帧所经过的像素数更容易。

我尝试过,但之后角色根本就没有冲刺。。。也许我的代码在另一部分有冲突,我想(?)无论如何谢谢:)哇,我调整了一些东西,现在它工作得很好!只是因为我设定了时钟,事情重叠了;0再次感谢您的帮助!!我试过了,但没用。。也许我应该多做点什么。谢谢,顺便说一句