如何在pygame的函数定义中分配精灵图层?

时间:2019-05-11 07:21:09

标签: python pygame sprite

我正在尝试使用Pygame编写一个名为“ Scrolling Shooter”的游戏。我试图以正确的顺序在彼此之间绘制精灵。在每个Sprite类的初始化函数中,我分配一个名为“ layer”的属性。根据pygame的文档,这应该在allSprites = pygame.sprite.LayeredUpdates()函数中更改子画面中子画面的层,并且应将图层值较高的子画面绘制在值较低的子画面之上。尽管有该参数,但如果我在draw函数中使用get_layer_of_sprite,它只会给出0。r / pygame subreddit上的某人说该属性应为_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文档: “如果您添加的精灵具有属性层,那么将使用该层。如果** kwarg包含'layer',则传递的精灵将被添加到该层(覆盖sprite.layer属性)。如果两个精灵都没有属性图层或** kwarg,然后使用默认图层添加精灵。”

预先感谢您的帮助。我可能做错了一点小事,弄乱了一切,这在我编码时经常发生。

如果我在初始化精灵后将其添加到精灵中,它似乎可以正常工作。但是,我希望能够在初始化函数中设置图层。

预期结果: 平面的层高于岛的层,因此应在岛上绘制平面。 输出应为: 飞机3 岛屿1

实际结果: 平面的层等于岛的层。绘制顺序是随机的,并且岛在平面上绘制 输出为: 飞机0 岛屿0

1 个答案:

答案 0 :(得分:0)

好吧,我已经找到解决方法,方法是将pygame.sprite.LayeredUpdates.change_layer(allSprites,self,self.layer) 在初始化函数中。 我仍然不明白为什么它一开始不起作用。