Pygame 将一组精灵作为一个整体移动

Pygame 将一组精灵作为一个整体移动,pygame,sprite,game-physics,Pygame,Sprite,Game Physics,我正在使用Python2.7和pygame开发一个太空入侵者克隆版。我可以让我的坦克开动,发射子弹,外星飞船被删除,所以碰撞检测工作正常。我已经创建了一个精灵小组,我希望我可以使用这个小组将所有的船只作为一个整体移动。 我也尝试过“unionall”,但这似乎对团队不起作用。 我可以像这样环游所有的飞船: shipXpos = [] for ship in shipList: shipXpos.append(ship.rect.x) 那么 通过这种方式,我希望找到船只的边界(尽管我猜r

我正在使用Python2.7和pygame开发一个太空入侵者克隆版。我可以让我的坦克开动,发射子弹,外星飞船被删除,所以碰撞检测工作正常。我已经创建了一个精灵小组,我希望我可以使用这个小组将所有的船只作为一个整体移动。 我也尝试过“unionall”,但这似乎对团队不起作用。 我可以像这样环游所有的飞船:

shipXpos = []
for ship in shipList:
    shipXpos.append(ship.rect.x)
那么

通过这种方式,我希望找到船只的边界(尽管我猜rect.right和rect.left会更好),与屏幕上的边缘相比,这样我就可以改变船只的方向

看来如果我能把所有的精灵都当作一个大矩形,那将是最简单的方法


我希望这是有道理的,是明确的。谢谢。

在外星飞船的精灵类中,编写一个移动外星飞船的
更新
函数。您可以向其传递可能需要的任何参数(例如当前方向向左或向右)。然后,在主程序中使用
pygame.sprite.Group.update()
一次更新所有精灵


根据您想要的行为,您可能不需要检查屏幕的侧面是否有碰撞。我假设你想让所有的外星飞船一致移动,也就是说,如果最外层的飞船撞到边缘,你想让所有的飞船改变方向。即使最外层的飞船被摧毁,原始的太空入侵者也会这样做,这意味着剩余的飞船不会移动到外缘,而是停留在预定的路径上。在这种情况下,每艘船在向左移动之前都会向右移动一定数量的像素,您只需要在
更新
功能中跟踪该循环。

Hmm“movement”标签的描述是“请勿使用-模棱两可”。。。你确定要用它吗?这可能是模棱两可的,依我看:)这是有道理的,谢谢你。事实上,在这段时间里,我以一种稍微不同的方式做到了这一点。我写了一个函数来查找所有船只的最大和最小x位置。因此,我将当前的ships列表传递到函数中,并返回max和min位置。然后将这些信息与船舶方向一起输入if语句,该语句根据当前位置决定下一步行动。谢谢你,我也不知道原来的游戏就是这么做的。很好的回答,再次谢谢你。
shipXMax = max(shipXpos)
shipXMin = min(shipXpos)