【问题标题】:Pygame: Charachter invincibility taking 2 damage instead of 1Pygame:角色无敌受到 2 点伤害而不是 1 点
【发布时间】:2020-04-20 05:41:16
【问题描述】:

所以,我正在 Pygame 中为学校项目制作游戏。现在,我的角色与敌人相撞。一旦玩家被击中,我就会无敌,但出于某种原因,玩家第一次击中会受到 2 点伤害,然后计时器开始工作,他们的玩家暂时无敌。

播放器类代码:

vec = pg.math.Vector2

class Player(pg.sprite.Sprite):
        def __init__(self, Game,bullet):
            pg.sprite.Sprite.__init__(self)
            self.Game = Game
            self.image = pg.image.load('idle.png')
            self.rect = self.image.get_rect()
            self.rect.center = (screenWidth / 2, screenLength / 2)
            self.pos = vec(screenWidth / 2, screenLength / 2)
            self.vel = vec(0, 0)
            self.acc = vec(0,0)
            self.health = 3
            self.ammo = 10
            self.cooldown = 700
            self.bullet = bullet
            self.timer = pg.time.get_ticks()
            self.itimer = pg.time.get_ticks()
            self.left = False
            self.right = False
            self.invincin = False
            self.invincinCoolDown= 1300

Enemy Class(忽略结束变量):

class enemy(pg.sprite.Sprite):
    def __init__(self,x,y,end):
        pg.sprite.Sprite.__init__(self)
        self.image = pg.image.load("enemy.png")
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.alive = True
        self.health = 3
        self.end = end
        self.speed = 1
        self.timer = pg.time.get_ticks()

这是我在玩家被击中时的代码(Invincin 是 incibility):

if pHits:
     if self.player.invincin == False:
     self.health -= 1
     self.player.invincin = True

这是我的无敌密码:

        if self.player.invincin == True:
            inow = pg.time.get_ticks()
            if inow - self.player.itimer >= self.player.invincinCoolDown:
                self.player.itimer = inow
                self.player.invincin = False

这是我的碰撞代码:

pHits = pg.sprite.spritecollide(self.player,self.all_enemy, False, False)

谁能帮忙?

【问题讨论】:

    标签: python pygame


    【解决方案1】:

    请提供完整代码。但也许我看到了可能的问题。在您的代码中:

    if pHits and self.player.invincin == False:
    

    我得出的结论是,当两者都为 False 时,您希望此条件通过,但当 pHits == Trueself.player.invincin == False 时,此条件通过。如果我假设正确,也许可以先尝试更改它。

    【讨论】:

    • 我添加了更多代码。我尝试拆分代码,但没有成功。
    • 我想也许您希望 pHitsself.player.invincin 都为 False 以便通过条件。抱歉,看不到问题。我需要完整的代码才能提供帮助。
    猜你喜欢
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多