Я работаю над этой игрой с pygame, и я пытаюсь добавить анимированное усиление, и у меня проблемы - PullRequest
1 голос
/ 09 мая 2020

Итак, я делаю эту игру и пытаюсь добавить анимированный набор бонусов / здоровья, который лечит игрока. Я попытался повторно использовать код, который я использовал для создания анимации взрыва, но способ, которым я этого не делаю, явно неверен, и мне нужна помощь.

Мой Git концентратор ниже: https://github.com/Sirbraindamage/Games-and-Project.git

Это код анимации взрыва кода, который я пытался адаптировать к анимированному усилению

enter image description here

Что он делает, он зацикливается через все изображения, когда он вызывается в main. он также масштабирует изображения до двух размеров. больший размер, когда все пули попадают в NP C, и меньший, когда NP C поражает игрока.

enter image description here

Этот код аналогичен приведенному выше, поскольку он l oop просматривает изображения, но пытался включить его в спрайт для включения питания, но это не сработало.

enter image description here

Вот как я пытался включить его в спрайт, который не работал ...

enter image description here

Это изображение ошибки, которая появляется при попытке запуска бонуса

enter image description here

Это код, который используется для создания бонуса ...

Остальные коды в Github (скажите, работает это или нет, я новичок в GitHub)

Так что, если кто-нибудь может узнать, как добавить анимированное усиление, которое лечит игрока, я был бы очень оценен. Кроме того, в классе игрока есть переменная здоровья, если вы ее ищете.

Также полный код на Github

странная визуальная ошибка: enter image description here

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Добавьте атрибут frame и прочтите первое изображение в конструкторе:

self.image = powerup_anim['HP'][0]
self.frame = 0

Измените изображение в update. Чтение и изображение из списка в зависимости от атрибута frame и приращения frame:

self.image = powerup_anim['HP'][self.frame]
self.frame += 1
if self.frame > len(powerup_anim['HP'])
    self.frame = 0

class Pow:

class Pow(py.sprite.Sprite):
    def __init__(self, center):
        py.sprite.Sprite.__init__(self)

        self.image = powerup_anim['HP'][0]
        self.frame = 0
        self.last_update = py.time.get_ticks()
        self.frame_rate = 75

        self.rect = self.image.get_rect()
        self.rect.center = center
        # py.draw.circle(self.image, RED, self.rect.center, self.radius)

    def update(self):

        now = py.time.get_ticks()
        if now - self.last_update > self.frame_rate:
            self.image = powerup_anim['HP'][self.frame]
            self.last_update = now
            self.frame += 1
            if self.frame >= len(powerup_anim['HP']):
                self.kill()

        # kill if moved of screen
        if self.rect.bottom > HEIGHT + 20 or self.rect.top < -20:
            self.kill()
        if self.rect.right > WIDTH + 20 or self.rect.left < -20:
            self.kill()
1 голос
/ 09 мая 2020

В ошибке написано list object has no attribute get_rect. То есть дело не в изображении, а в списке изображений. поэтому, чтобы получить изображение, вы можете просто получить первое

self.image = powerup_anim['HP'][0] #get first image

Также код для взрыва, кажется, можно использовать повторно. Вы даже можете создать один общий класс для анимации, но для экспертов это не нужно

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