我看了一下文档,试图在网上找到一些例子,但是我没能把我的精灵分层。以下是部分代码:
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
对冲突的管理进行得很顺利,这似乎表明组是正常的。唯一的问题是:无论我在Player
和Tree
类中为self.layer
设置的值是什么,树(所有树)总是在播放器上方闪烁。在
documentation表示几种指定层的方法,包括: “如果添加的精灵具有属性层,则将使用该层。” 这正是我所做的,没有成功。在
请注意,我并没有真正“添加”精灵到组中;我将组分配到精灵的类中,因为这是我过去对pygame.sprite.Group()
所做的操作,这很方便,而且通常都是相同的。我试着使用分组的add()
方法,但它没有改变任何东西。在
我想也许我没有正确初始化组,但奇怪的是,除了分层之外,一切都正常。我将非常感谢一些有用的例子。在
我自己的一个项目也遇到了同样的问题。我不知道为什么,但是精灵组无法识别层属性。我的解决方案是把这层组.添加()方法使用如下关键字参数:
为了方便起见,我喜欢在init方法中将sprite添加到组中。在
我不认为有必要有多个小组分层。为一个组绘制更方便,LayeredUpdate组将负责所有的分层。在
相关问题 更多 >
编程相关推荐