蟒蛇。如何从列表中删除对象

时间:2012-12-29 05:57:43

标签: python list

所以我正在学习基本的游戏编程,我有这个Bullet课程,当然这是游戏中子弹的课程。

bulletGroup = [i for i in bulletGroup if i.buly < screen.get_height()]
for shot in bulletGroup:
    shot.buly -=3

这就是我所做的,所以我可以删除已经通过屏幕的子弹frpm abpve /但它似乎没有减少我的列表的长度,因此第一行代码可能无法正常工作。那么我该如何检查对象列表,然后删除所有我想要破坏的对象。

编辑: 是的我通过打印来检查列表中的对象是否正常,并且它们肯定小于屏幕高度。然而他们仍然是名单的一部分?所有这些都在游戏循环顺便说一句。因此,对于那些失控的子弹,每个刻度都应该有更新子弹组。

2 个答案:

答案 0 :(得分:4)

您每次从3减去buly,因此永远不会超过screen.get_height()

根据游戏的工作方式,您应该将buly0进行比较:

bulletGroup = [i for i in bulletGroup if i.buly >= 0]
for shot in bulletGroup:
    shot.buly -= 3

或者添加3到buly代替:

bulletGroup = [i for i in bulletGroup if i.buly < screen.get_height()]
for shot in bulletGroup:
    shot.buly += 3

答案 1 :(得分:0)

您可能还会发现最好保留一个固定的项目符号池,而不是将它们添加到列表中,然后将其删除。相反,给他们一个标志来“停用”他们,这样他们就不会在每一帧都得到更新或绘制,然后在需要更多时“激活”一个新的。

如果您经常创建和销毁子弹对象,您将导致大量垃圾收集并在游戏中产生定期暂停。固定的对象池可以防止出现问题,并且可以避免一次性意外创建太多。

相关问题