Нашел странную ошибку хитбокса в pygame. Если игрок умирает в моей игре, хитбокс остается, что создает некоторые проблемы - PullRequest
1 голос
/ 22 февраля 2020

Я нашел метод sprite.kill(), возившись с тем, что должен предложить Pygame. Однако я узнал, что по какой-то причине хитбокс игрока остается там, где игрок был убит, если я использую это утверждение. Это создает некоторые проблемы, например, я использую счетчик смерти, чтобы отследить смерть игрока, и, скажем, если я наберу ie на пике, хитбокс останется, и поэтому счетчик смерти будет продолжать складываться. Мой обходной путь с этим состоял в том, чтобы установить x и y pos игрока в углу игрового окна, но чем больше я развивал свою игру, я понял, что это решит мою проблему.

Спасибо за помощь.

1 Ответ

0 голосов
/ 22 февраля 2020

Это не ошибка. Если у вас есть ссылка на объект a Sprite где-то еще, чем в Group, то этот объект остается живым (конечно), даже если вы kill ит. kill не уничтожает объект, он просто удаляет объект для всех групп.
Это приводит к тому, что объект не обновляется с помощью механизма pygame.sprite.Group.update(), и все его атрибуты остаются без изменений.
Если Sprite не является частью Group, то вы должны обновить объект самостоятельно. Никто не будет магически изменять атрибуты и, конечно, «хитбокс остается»

. Решение было бы переопределить метод kill и сбросить некоторые атрибуты (например, поле попаданий) в производном классе:

class MySprite(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()  
        # [...]

    def kill(self):
        print("kill me")

        # reset some attributes
        # [...]

        # kill the sprite
        super().kill()
...