Вопросы по созданию спрайтов в pygame

Итак, в основном то, что я знаю, как сделать, - это добавить спрайт игрока (создать класс игрока, унаследованный от pygame.sprite и т. Д.), Это работает для меня.

Что я хотел бы знать, так это повторять создание спрайтов и добавлять их в группу спрайтов. Это потому, что у меня есть 2-мерный массив, и у меня есть функция, которая читает это и размещает «плитки» соответственно в 2-м пространстве, это упрощает создание уровней. Итак, что я хочу, чтобы эта функция делала, это создавала эти спрайты (я думаю, с помощью цикла for, который считывает массив?) И добавляла их для создания группы, но это не работает, поэтому сначала у меня есть несколько вопросов:

1) Можно ли создавать спрайты вне функции init в классе?

2) Что на самом деле представляют собой спрайты, это поверхность, соединенная с прямоугольником?

3) И, наконец, есть ли у вас представление о том, как это сделать: если я дам вам 2-мерный массив, как бы вы сделали функцию, которая считывает этот массив и вычисляет позицию (это нормально, я думаю, что я понял) out) и, что наиболее важно, сделайте спрайты из заданных позиций, которые затем можно будет добавить в группу спрайтов.

заранее спасибо


person notproplayer 3    schedule 05.06.2020    source источник


Ответы (1)


Можно ли создавать спрайты вне функции инициализации в классе?

Конечно.

Что на самом деле представляют собой спрайты, это поверхность, соединенная с прямоугольником?

Если говорить о классе Sprite в pygame: да.

Такой спрайт в основном представляет собой Surface (атрибут image) и Rect (атрибут rect). Лучше всего они работают вместе с Group классами pygame.

И, наконец, у вас есть представление о том, как это сделать ...

Просто создайте вложенный цикл для перебора массива.

Вот простой пример:

import pygame
pygame.init()

TILESIZE = 64

class Actor(pygame.sprite.Sprite):
    def __init__(self, color, pos):
        super().__init__()
        self.image = pygame.Surface((TILESIZE, TILESIZE))
        self.image.fill(pygame.Color(color))
        self.rect = self.image.get_rect(topleft = pos)

def main():

    data = [
        '     YUB  ',
        '  G       ',
        '        B ',
        '          ',
        '   Y      ',
        '        U ',
    ]

    screen = pygame.display.set_mode((len(data[0]) * TILESIZE, len(data) * TILESIZE))
    sprites = pygame.sprite.Group()

    colors = {
        'G': 'green',
        'B': 'black',
        'Y': 'yellow',
        'U': 'dodgerblue'
    }

    x, y = 0, 0
    for line in data:
        for char in line:
            if char in colors:
                sprites.add(Actor(colors[char], (x * TILESIZE, y * TILESIZE)))
            x += 1
        x = 0
        y += 1

    while True:
        events = pygame.event.get()
        for event in events:
            if event.type == pygame.QUIT:
                pygame.quit()
                return

        sprites.update()

        screen.fill((100, 100, 100))
        sprites.draw(screen)

        pygame.display.flip()

main()

введите описание изображения здесь

Другой пример можно найти здесь.

person sloth    schedule 05.06.2020