如何在不停止整个代码的情况下让演员跳跃?
How to I make the actor jump without stopping the entire code?
我正在尝试 dino
跳跃,但是当我在 dino
跳跃和下落之间使用 time.sleep(0.1)
时,整个游戏停止了 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 is not Pygame Zero.
无论如何,如果您使用 Pygame Zero, then you can use the elapsed time parameter of the update
回调:
def uptate(dt):
经过的时间参数 (dt
) 给出了自经纬度帧以来经过的时间,以秒为单位。
创建一个状态 (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
的时间,完成跳转分别休息jump
状态,如果jump_time
小于0.0:
def uptate(dt):
if jump:
jump_time -= dt
if jump_time < 0:
dino.y += 100
jump = False
我正在尝试 dino
跳跃,但是当我在 dino
跳跃和下落之间使用 time.sleep(0.1)
时,整个游戏停止了 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 is not Pygame Zero.
无论如何,如果您使用 Pygame Zero, then you can use the elapsed time parameter of the update
回调:
def uptate(dt):
经过的时间参数 (dt
) 给出了自经纬度帧以来经过的时间,以秒为单位。
创建一个状态 (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
的时间,完成跳转分别休息jump
状态,如果jump_time
小于0.0:
def uptate(dt):
if jump:
jump_time -= dt
if jump_time < 0:
dino.y += 100
jump = False