Pygame:根据屏幕上的位置对组中的精灵进行排序

时间:2015-12-12 15:46:31

标签: python pygame

我目前正在使用Pygame创建一个太空入侵者游戏。

我创造了外星敌人并将它们添加到一个名为“外星人”的组中。

我有多行入侵者,使用以下代码创建:

yPos = self.top_boundary
    for r in range(self.total_rows):
        xPos = self.left_boundary
        for i in range(self.invaders_per_row):
            self.alien = Invader(xPos, yPos)
            self.aliens.add(self.alien)
            xPos += 32
        yPos += 40

现在,为了在入侵者屏幕上反转入侵者的方向,我需要确定哪个入侵者是“最左边”的入侵者,并检查它是否已经到达屏幕的左侧。

我的问题是,它们没有以任何特定顺序存储在组中。如何确定哪个入侵者位于最左侧?

我可以使用的另一种方法是使用列表来存储对象。然后我可以轻松地遍历列表以确定最左边的入侵者。这会是一个更好的选择吗?

2 个答案:

答案 0 :(得分:0)

您可以使用OrderedUpdates类,维护将精灵添加到群组中的顺序以进行渲染

答案 1 :(得分:0)

假设您有一组Invader个具有x-Position属性的对象,您可以使用min找到x-Position最小的对象。最小的例子:

class Invader(object):
    def __init__(self, xpos, ypos):
        self.xpos = xpos
        self.ypos = ypos

    def __str__(self):
        return str((self.xpos, self.ypos))

invaders = [Invader(3, 2), Invader(4, 9), Invader(0, 100)]
print(min(invaders, key=lambda x: x.xpos)) # prints '(0, 100)'

对于像这样的游戏来说,拥有所有入侵者的集合对我来说似乎很自然。