我试图使dino跳跃,但是当我在time.sleep(0.1)跳跃和摔倒之间使用dino时,整个游戏停止了0.1秒。

我尝试使用time.sleep,仅此而已,因为我无法在线找到其他有用的信息。

def jump():
    dino.y -= 100
    time.sleep(0.1)
    dino.y += 100

def on_key_up(key):
    jump()


当我按下向上箭头时,整个游戏冻结了0.1秒。

最佳答案

我建议使用计时器事件。播放器跳跃时,请按pygame.time.set_timer()启动计时器。当计时器事件发生时,然后完成跳转:

jump_delay = 100 # 100 milliseconds == 0.1 seconds
jump_event = pygame.USEREVENT + 1


def jump():
    dino.y -= 100

    # start a timer event which just appear once in 0.1 seconds
    pygame.time.set_timer(jump_event, jump_delay, True)

def on_key_up(key):
    jump()


# event loop
for event in pygame.event.get():

    # jump timer event
    if event.type == jump_event:
       dino.y += 100

# [...]


注意,在pygame中可以定义客户事件。每个事件都需要一个唯一的ID。用户事件的ID必须以pygame.USEREVENT开头。在这种情况下,pygame.USEREVENT+1是计时器事件的事件ID,它完成跳转。



Pygame不是Pygame Zero

无论如何,如果您使用Pygame Zero,则可以使用update回调的经过时间参数:


  
def uptate(dt):



经过的时间参数(dt)以秒为单位给出自lat帧以来经过的时间。

创建一个状态(jump),该状态指示dino是否在跳跃。还有一个时间(jump_time),它指出了跳转必须持续多长时间:

jump = False
jump_time = 0.0


jump中设置状态和时间:

def jump():
    global jump, jump_time
    dino.y -= 100
    jump = True
    jump_time = 0.1 # 0.1 seconds


如果update小于0.0,则减小jump中的时间并完成跳转,分别保持jump_time状态:

def uptate(dt):

    if jump:
        jump_time -= dt
        if jump_time < 0:
            dino.y += 100
            jump = False

关于python - 如何在不停止整个代码的情况下使actor跳转?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58327639/

10-16 22:14