我目前正在使用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
现在,为了在入侵者屏幕上反转入侵者的方向,我需要确定哪个入侵者是“最左边”的入侵者,并检查它是否已经到达屏幕的左侧。
我的问题是,它们没有以任何特定顺序存储在组中。如何确定哪个入侵者位于最左侧?
我可以使用的另一种方法是使用列表来存储对象。然后我可以轻松地遍历列表以确定最左边的入侵者。这会是一个更好的选择吗?
答案 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)'
对于像这样的游戏来说,拥有所有入侵者的集合对我来说似乎很自然。