PyGame:使用pygame.sprite.LayeredUpdates()

2024-05-19 01:06:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我看了一下文档,试图在网上找到一些例子,但是我没能把我的精灵分层。以下是部分代码:

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()

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

documentation表示几种指定层的方法,包括: “如果添加的精灵具有属性层,则将使用该层。” 这正是我所做的,没有成功。在

请注意,我并没有真正“添加”精灵到组中;我将组分配到精灵的类中,因为这是我过去对pygame.sprite.Group()所做的操作,这很方便,而且通常都是相同的。我试着使用分组的add()方法,但它没有改变任何东西。在

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


Tags: selflayertreeinitscreenpygametrees例子
1条回答
网友
1楼 · 发布于 2024-05-19 01:06:00

我自己的一个项目也遇到了同样的问题。我不知道为什么,但是精灵组无法识别层属性。我的解决方案是把这层组.添加()方法使用如下关键字参数:

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

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

我不认为有必要有多个小组分层。为一个组绘制更方便,LayeredUpdate组将负责所有的分层。在

相关问题 更多 >

    热门问题