Как мне назначить слой спрайта в определении функции в Pygame? - PullRequest
0 голосов
/ 11 мая 2019

Я пытаюсь написать игру под названием «Скроллинг-шутер» с помощью Pygame.Я пытаюсь нарисовать спрайты друг над другом в правильном порядке.В функции инициализации каждого класса спрайта я назначаю атрибут, называемый «слой».Согласно документации Pygame, это должно изменить слой спрайта в спрайте в функции allSprites = pygame.sprite.LayeredUpdates (), и спрайты с более высоким значением layer должны быть нарисованы поверх спрайтов с более низким значением.Несмотря на параметр, если я использую get_layer_of_sprite в функции рисования, он просто дает 0. Кто-то в подредите r / pygame сказал, что атрибут должен быть _layer вместо layer, но это тоже не сработало.

Функция allSprites.draw (display) входит в мою функцию draw ().Функция draw () вызывается на каждой итерации основного цикла.

Соответствующий код можно найти здесь: https://github.com/CiriOfRivia/Pygame-Scrolling-Shooters/blob/master/hi

Полный код можно найти здесь: https://github.com/CiriOfRivia/Pygame-Scrolling-Shooters/blob/master/Layering%20issue

Pygame docs: «Если добавляемый вами спрайт имеет слой атрибута, то этот слой будет использоваться. Если ** kwarg содержит« layer », то переданные спрайты будут добавлены в этот слой (переопределяя sprite.layerattribute). Если ни спрайт не имеет атрибутного слоя, ни ** kwarg, то для добавления спрайтов используется слой по умолчанию. "

Заранее спасибо за помощь.Я, вероятно, сделал одну маленькую ошибку, которая все испортила, что очень часто случается, когда я кодирую.

Если я добавляю слой к спрайтам после их инициализации, кажется, что он работает нормально.Однако я хочу иметь возможность установить слой в функции инициализации.

Ожидаемый результат: слой плоскости выше, чем слой острова, поэтому плоскость следует рисовать над островом.Выходные данные должны быть: Plane 3 Island 1

Фактический результат: слой плоскости равен слою острова.Порядок рисования является случайным, и остров рисуется поверх плоскости. Выходные данные: Плоскость 0 Остров 0

1 Ответ

0 голосов
/ 11 мая 2019

Хорошо, я нашел обходной путь, поместив pygame.sprite.LayeredUpdates.change_layer (allSprites, self, self.layer) внутри функции инициализации. Я до сих пор не понимаю, почему это не сработало.

...