如何在pygame中为敌人的攻击添加冷却时间?

我尝试过使用 threading.timer 来解决这个问题,但似乎无法让它为我想做的事情工作。无错误消息。要么它甚至不会从玩家的生命值中减去,要么它只是立即耗尽生命值,从而击败整个点,而time.sleep只是冻结了整个程序。


这是我无法正常工作的代码


from threading import Timer

import pygame


playerhealth = ['<3', '<3', '<3', '<3', '<3'] # just a list of player health symbolized by hearts


running = True

while running:

    def removehealth():    

        playerhealth.__delitem__(-1) # deletes the last item in the list of hearts



    t = Timer(1, removehealth)

    t.start()


    # id display the hearts on screen down here


胡子哥哥
浏览 122回答 2
2回答

素胚勾勒不出你

使用pygame做到这一点的方法是使用pygame.time.set_timer()来重复创建一个用户事件。例如:milliseconds_delay = 1000 # 1 secondstimer_event = pygame.USEREVENT + 1pygame.time.set_timer(timer_event, milliseconds_delay)在pygame中,可以定义客户事件。每个事件都需要一个唯一的 ID。用户事件的 ID 必须介于 (24) 和 (32) 之间。在本例中是计时器事件的事件 ID,这会耗尽生命值。pygame.USEREVENTpygame.NUMEVENTSpygame.USEREVENT+1当事件在事件循环中发生时,删除一个心形:running = Truewhile running:&nbsp; &nbsp; for event in pygame.event.get():&nbsp; &nbsp; &nbsp; &nbsp; if event.type == pygame.QUIT:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; running = False&nbsp; &nbsp; &nbsp; &nbsp; elif event.type == timer_event:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; del playerhealth[-1]可以通过将 0 传递给 time 参数 () 来停止计时器事件。pygame.time.set_timer(timer_event, 0)

慕少森

您可以使用该模块并等待一定数量的秒。timeimport timestart = time.time() # gets current timewhile running:&nbsp; &nbsp; if time.time() - start > 1: # if its been 1 second&nbsp; &nbsp; &nbsp; &nbsp; removehealth()&nbsp; &nbsp; &nbsp; &nbsp; start = time.time()此外,要删除列表中的最后一项,您可以执行del playerhealth[-1]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python