为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

胡子哥哥 2022-09-27 16:19:01
我尝试过使用 threading.timer 来解决这个问题,但似乎无法让它为我想做的事情工作。无错误消息。要么它甚至不会从玩家的生命值中减去,要么它只是立即耗尽生命值,从而击败整个点,而time.sleep只是冻结了整个程序。这是我无法正常工作的代码from threading import Timerimport pygameplayerhealth = ['<3', '<3', '<3', '<3', '<3'] # just a list of player health symbolized by heartsrunning = Truewhile 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
查看完整描述

2 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

使用pygame做到这一点的方法是使用pygame.time.set_timer()来重复创建一个用户事件。例如:

milliseconds_delay = 1000 # 1 seconds

timer_event = pygame.USEREVENT + 1

pygame.time.set_timer(timer_event, milliseconds_delay)

在pygame中,可以定义客户事件。每个事件都需要一个唯一的 ID。用户事件的 ID 必须介于 (24) 和 (32) 之间。在本例中是计时器事件的事件 ID,这会耗尽生命值。pygame.USEREVENTpygame.NUMEVENTSpygame.USEREVENT+1


当事件在事件循环中发生时,删除一个心形:


running = True

while running:


    for event in pygame.event.get():

        if event.type == pygame.QUIT:

            running = False


        elif event.type == timer_event:

            del playerhealth[-1]

可以通过将 0 传递给 time 参数 () 来停止计时器事件。pygame.time.set_timer(timer_event, 0)


查看完整回答
反对 回复 2022-09-27
?
慕少森

TA贡献2019条经验 获得超9个赞

您可以使用该模块并等待一定数量的秒。time


import time


start = time.time() # gets current time


while running:

    if time.time() - start > 1: # if its been 1 second

        removehealth()

        start = time.time()

此外,要删除列表中的最后一项,您可以执行del playerhealth[-1]


查看完整回答
反对 回复 2022-09-27
  • 2 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信