我在 Windows 上工作,当我使用 time.sleep 时,它总是在任何其他函数之前发生。
我尝试将其放在其他区域,但总是出现同样的问题。
def all_cards():
card.rect.y -= 50
card.clicked = True
def delete(card1, card2):
card1.exist = False
card2.exist = False
card1.clicked = False
card2.clicked = False
card1.rect.y = 275
card2.rect.y = 0
if card.rect.collidepoint(x, y):
all_cards()
if example.clicked and example2.clicked:
time.sleep(1)
hp -= 5
image_clickables.remove(example)
image_clickables.remove(example2)
问题是第一张卡在点击时会移动,但当第二张卡被点击时,它在向上移动之前有 2 秒的延迟,然后同时被删除,因此无法看到它向上移动。
当点击时,两张卡应该立即向上移动,然后有 2 秒的延迟,两张卡都会被删除并放回原来的位置以供以后使用,我尝试将 time.sleep() 放在删除函数本身中,但没有成功。
pygame 调用 pygame.display.update() 时更新窗口。因此,在 pygame.display.update() 之前执行的所有代码都会同时应用于 gui。
另外,time.sleep() 也会暂停更新 GUI。
要解决问题,请使用 pygame.time.tick() 来计算已经过去了多少秒
### init function
# isTimerSet = false
### main loop
deltatime = pygame.time.tick()
if example.clicked and example2.clicked and not isTimerSet:
timer = 0
isTimerSet = True
if isTimerSet:
if timer < 1000: # 1000ms = 1s
timer += deltatime
else:
isTimerSet = False
hp -= 5
image_clickables.remove(example)
image_clickables.remove(example2)