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

2024-05-16 21:45:49 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: andkeyeventmods角色get玩家keys
2条回答

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

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

使用时间限制比计算播放器每帧遍历的像素数更容易

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

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

相关问题 更多 >