Python Pygame“;定时事件“;功能

Python Pygame“;定时事件“;功能,python,pygame,Python,Pygame,我从来没有找到一个清晰的答案来解释如何在pygame中创建定时事件 我想创建一个有持续时间和冷却时间的定时移动。(对于本例,我们分别假设为1s和2s)。 类似于游戏中的躲避或冲刺技能 我重新编辑了代码,并: dash_now = 0 dash_cooldown = 2 if dash: while dash_now < 2 and dash_cooldown >= 0: dash_now +- clock.tick(60) / 1000

我从来没有找到一个清晰的答案来解释如何在pygame中创建定时事件

我想创建一个有持续时间和冷却时间的定时移动。(对于本例,我们分别假设为1s和2s)。 类似于游戏中的躲避或冲刺技能

我重新编辑了代码,并:

dash_now = 0
dash_cooldown = 2
    if dash:
        while dash_now < 2 and dash_cooldown >= 0:
            dash_now +- clock.tick(60) / 1000
            player.dash()
            firing == False
        else:
            dash = not dash
            dash_now ==  0
            dash_cooldown == 3
            dash_cooldown +- clock.tick(60) / 1000
dash\u现在=0
仪表板冷却时间=2
如果破折号:
当破折号现在<2且破折号冷却时间>=0时:
dash_now+-时钟。勾选(60)/1000
player.dash()
发射==假
其他:
破折号=不破折号
dash_now==0
破折号冷却时间==3
仪表盘冷却时间+-时钟。勾选(60)/1000

到目前为止还没有工作。。。我一定是犯了个愚蠢的错误,我看不出是哪个

其实很简单:

假设您有一个计时器变量

timer = 0
之后,在每次迭代期间,添加自最后一帧以来经过的时间:

timer += my_clock.tick(60) / 1000
最后,在代码的后面,您可以检查它是否满足某个阈值

if timer >= 2:
    # Insert whatever you want

    timer = 0
因此,您的代码可以像这样大大简化,只要您不希望在整个运动中处于循环中

self.dash_delay = 0
self.is_dashing = 0

def dash(self):
        if dash_delay < 0 and self.is_dashing < 2:

            self.rect.x += self.speedx * 2
            self.rect.y += self.speedy * 2
            self.is_dashing +- clock.tick(60) / 1000

        elif self.is_dashing > 2:
            self.dash_delay = 3
            self.is_dashing = 0

        self.dash_delay -= clock.tick(60) / 1000
self.dash\u延迟=0
self.is_dash=0
def破折号(自我):
如果破折号延迟<0且self.is破折号<2:
self.rect.x+=self.speedx*2
self.rect.y+=self.s*2
self.is_dash+-时钟。勾选(60)/1000
elif self.is_dashing>2:
self.dash_延迟=3
self.is_dash=0
自破折号延迟-=时钟滴答(60)/1000

其实很简单:

假设您有一个计时器变量

timer = 0
之后,在每次迭代期间,添加自最后一帧以来经过的时间:

timer += my_clock.tick(60) / 1000
最后,在代码的后面,您可以检查它是否满足某个阈值

if timer >= 2:
    # Insert whatever you want

    timer = 0
因此,您的代码可以像这样大大简化,只要您不希望在整个运动中处于循环中

self.dash_delay = 0
self.is_dashing = 0

def dash(self):
        if dash_delay < 0 and self.is_dashing < 2:

            self.rect.x += self.speedx * 2
            self.rect.y += self.speedy * 2
            self.is_dashing +- clock.tick(60) / 1000

        elif self.is_dashing > 2:
            self.dash_delay = 3
            self.is_dashing = 0

        self.dash_delay -= clock.tick(60) / 1000
self.dash\u延迟=0
self.is_dash=0
def破折号(自我):
如果破折号延迟<0且self.is破折号<2:
self.rect.x+=self.speedx*2
self.rect.y+=self.s*2
self.is_dash+-时钟。勾选(60)/1000
elif self.is_dashing>2:
self.dash_延迟=3
self.is_dash=0
自破折号延迟-=时钟滴答(60)/1000

此外,由于您可能会使用多个冷却时间,因此类似于上次使用以来的
time\u的列表将非常有用,其中包含您拥有的每个技能的元素。然后,无论何时你想使用能力
4
,检查
如果(时间现在-自上次使用以来的时间[4]<能力冷却时间[4]):是否执行能力和自上次使用以来的更新时间[4]
请将你的代码编辑到问题中,而不是添加到注释中。是否愿意帮助我介绍我提出的更新问题的示例?(我错了,我现在更正了)很遗憾,我会离开一段时间,无法更新我的代码,我会在我更新代码后再次发表评论,以提供反馈。到目前为止,它对我没有任何帮助,所以我选择将其放在对象本身之外,是否要检查代码,或者修复它?(我创建它是为了在按下LSHIFT一次时激活dash,我只是合并了你的一些代码)添加到这个列表中,因为你可能会使用几个冷却时间,一个类似于
time\u since\u last\u used
的列表,其中包含了你拥有的每个技能的元素将非常有用。然后,无论何时你想使用能力
4
,检查
如果(时间现在-自上次使用以来的时间[4]<能力冷却时间[4]):是否执行能力和自上次使用以来的更新时间[4]
请将你的代码编辑到问题中,而不是添加到注释中。是否愿意帮助我介绍我提出的更新问题的示例?(我错了,我现在更正了)很遗憾,我会离开一段时间,无法更新我的代码,我会在我更新代码后再次发表评论,以提供反馈。到目前为止,它对我没有任何帮助,所以我选择将其放在对象本身之外,是否要检查代码,或者修复它?(我创建它是为了在按下LSHIFT一次时激活dash,我只是合并了一些代码)