首页 > 解决方案 > 当我在 pygame 中打印某些内容时,一个错误消失了

问题描述

我知道标题不是很清楚,但我不知道我还能说什么。

我有一个球员在进攻,当他进攻完成后,我会启动一个 1 秒的计时器,所以我们必须等待一秒才能再次进攻。它不起作用(我们只能攻击一次)而且我不知道为什么,所以我添加了print(self.between_two_attacks())并且一切正常,我可以攻击,等待一秒钟然后再次攻击。

这是程序,我不知道是否足够,因为我不知道错误来自哪里。

def between_two_attacks(self):
    if self.after_attack_max == 0:
        self.after_attack_max = pg.time.get_ticks() + 1000
        print("set timer")
    else:
        after_attack = pg.time.get_ticks()
        print("start timer")
        if after_attack >= self.after_attack_max:
            print("can attack again")
            self.can_attack = True
            self.after_attack_max = 0

def draw(self, win):
    print(self.between_two_attacks())
    if (self.attackcount + 1) >= 5:
        self.attackcount = 0
        self.between_two_attacks()
        self.action = STAND_UP
        self.arme = LIGHTSABER_OUT
        self.stops_attacking = True
        self.can_attack = False
    if self.action == ATTACKING:
        win.blit...

Run = True
While Run:
    for event in pg.event.get():
        if event.type == pg.KEYDOWN:
            if event.key == pg.K_SPACE and player.can_attack == True:
                player.action = ATTACKING



如果程序的这一部分有任何不清楚的地方,请告诉我,我会尽力解释。谢谢你的帮助 :)

标签: pythonpygame

解决方案


在检索between_two_attacks状态之前,必须调用该方法。设置在. 如果不调用该方法,则永远不会变成. 当你这样做时,就会调用。self.can_attackself.can_attackbetween_two_attacksself.can_attackTrue
print(self.between_two_attacks())self.between_two_attacks()

此外,该方法可以简化:

self.can_attackself.after_attack_max == 0如果当前时间大于 ,则必须设置self.after_attack_max
如果self.can_attack设置,则计算重新启动计时器。如果未设置,则必须对其进行评估。初始self.after_attack_max为 0。如果当前时间大于self.after_attack_max,则必须允许攻击并且必须重新启动计时器:

def between_two_attacks(self):

    current_time = pg.time.get_ticks()
    if self.can_attack:
        self.after_attack_max = current_time + 1000

    elif current_time > self.after_attack_max:
        self.can_attack = True
        self.after_attack_max = current_time + 1000

注意,self.after_attack_max仅在 中设置between_two_attacks,请勿在其他任何地方重置。


推荐阅读