gpt4 book ai didi

python - PyGame:使用 pygame.sprite.LayeredUpdates()

转载 作者:太空宇宙 更新时间:2023-11-03 17:51:46 26 4
gpt4 key购买 nike

我查看了文档并尝试在网上查找示例,但我没有设法对我的 Sprite 进行分层。以下是部分代码:

class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self, self.groups)
...
self.layer = 2

class Tree(pygame.sprite.Sprite):
def __init__(self, screen_size, tree_id):
pygame.sprite.Sprite.__init__(self, self.groups)
...
self.layer = 1



pygame.init()
...

sprites = pygame.sprite.LayeredUpdates()
players = pygame.sprite.LayeredUpdates()
trees = pygame.sprite.LayeredUpdates()

Player.groups = sprites, players
Tree.groups = sprites, trees
...

mario = Player()
nbtrees = 10
[Tree(size, x) for x in range(1,nbtrees+1)]


while 1:
...

sprites.clear(screen,background)
sprites.draw(screen)
pygame.display.flip()

我删除了不相关的部分,事件处理,碰撞检测等。事实是,它工作得非常好;例如,使用组树来管理冲突很顺利,这似乎表明组没问题。唯一的问题是:无论我在 self.layer 的 Player 和 Tree 类中设置什么值,树(所有树)总是blit 位于播放器上方。

documentation表示指定图层的几种方法,包括以下几种:“如果您添加的 Sprite 有一个属性层,那么将使用该层。”这正是我所做的,但没有成功。

请注意,我并没有真正将 Sprite “添加”到组中;我将这些组分配给我的 Sprite 的类,因为这就是我以前使用 pygame.sprite.Group() 所做的事情,这很方便,而且通常效果相同。我尝试使用组的 add() 方法,但它没有改变任何内容。

我想也许我没有正确初始化组,但奇怪的是,除了分层之外,一切都正常。我非常感谢一些工作示例。

最佳答案

我自己的一个程序也遇到了同样的问题。我不知道为什么,但 Sprite 组无法识别图层属性。我的解决方案是使用关键字参数将图层传递给 group.add() 方法,如下所示:

class player(pygame.sprite.Sprite):
layer = 1
def __init__ (self):
pygame.sprire.Sprite.__init__(self)
sprites.add(self, layer = self.layer)

为了方便起见,我喜欢在 init 方法中将 Sprite 添加到组中。

我认为没有必要有多个分层的组。一组绘图更方便,并且 LayeredUpdate 组将处理所有分层。

关于python - PyGame:使用 pygame.sprite.LayeredUpdates(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28997397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com