Pygame: непобедимость Charachter получает 2 урона вместо 1 - PullRequest
2 голосов
/ 20 апреля 2020

Итак, я делаю игру в 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

Класс врага (игнорируйте переменную конца):

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 - это неспособность):

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)

Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 20 апреля 2020

Пожалуйста, предоставьте полный код. Но, возможно, я вижу возможную проблему. В вашем коде:

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

Я пришел к выводу, что вы хотите, чтобы это условие прошло, когда оба являются ложными, но это условие выполняется, когда pHits == True и self.player.invincin == False. Возможно, попробуйте сначала изменить это, если я правильно предположил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...