Как нарисовать часть изображения спрайта, используя группы спрайтов pygame?

avatar
marienbad
9 мая 2021 в 05:18
102
1
1

Я хочу нарисовать часть изображения спрайта, чтобы медленно показать его. Если бы я занимался розыгрышем, я бы просто сделал:

def draw(self, screen):
    screen.blit(self.image, self.rect, self.viewport)

и измените размер области просмотра в методе обновления объектов. Я попытался добавить это в код, но он просто показывает все изображение. Обновление определенно вызывается методом обновления группы спрайтов, и область просмотра обновляется правильно, и в игре у меня есть:

self.all_sprites.draw(screen)

Как мне добиться этого, используя группы спрайтов pygame? Кроме того, ни у одного из спрайтов нет метода рисования.

Источник

Ответы (1)

avatar
Rabbid76
9 мая 2021 в 05:58
1

Вы можете определить подповерхность, которая напрямую связана с исходной поверхностью, с помощью метода subsurface:

subsurface(Rect) -> Surface

Возвращает новую поверхность, которая имеет общие пиксели со своим новым родителем. Новый Surface считается потомком оригинала. Изменения любых пикселей поверхности будут влиять друг на друга.

Создайте подповерхность либо один раз в конструкторе, либо постоянно в методе update. например:

class SpriteObject(pygame.sprite.Sprite):

    def __init__(self, image):
        # [...]

        self.complete_image = image 
        
    def update(self):
        self.image = self.complete_image.subsurface(self.viewport)

Теперь вам больше не нужен метод draw и вы можете использовать self.all_sprites.draw(screen), поскольку атрибут image является частью всего изображения. pygame.sprite.Group.draw() использует атрибуты image и rect содержащихся pygame.sprite.Sprite для рисования объектов.

marienbad
9 мая 2021 в 07:50
1

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

marienbad
9 мая 2021 в 08:02
1

Получил работу! выглядит мятным, еще раз спасибо!