我改变了速度来制作破折号,但想在这里添加一些破折号长度限制

I made velocity changing to make dash but want to add here some dash-lenght limit

所以我让我的角色(玩家)在按下 'L shift' 的同时按下 'left key' 或 'right key' 时可以更快地改变速度。 问题是,我想让这个 'dash' 在达到我设置的限制时停止。我希望我的角色一次冲刺次数不要超过 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_count 的变量,而不是测量像素,首先将其设置为零,并在字符破折号时使其增加 1。这可以通过 while 循环实现:

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

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

在下面的代码中,我将此时间限制设置为 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)        

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