为什么 time.sleep 发生在 python pygame 中的其他函数之前,即使我不希望它出现,我该如何修复它?

问题描述 投票:0回答:1

我在 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() 放在删除函数本身中,但没有成功。

python pygame delay
1个回答
0
投票

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)
© www.soinside.com 2019 - 2024. All rights reserved.