所以我正在学习基本的游戏编程,我有这个Bullet课程,当然这是游戏中子弹的课程。
bulletGroup = [i for i in bulletGroup if i.buly < screen.get_height()]
for shot in bulletGroup:
shot.buly -=3
这就是我所做的,所以我可以删除已经通过屏幕的子弹frpm abpve /但它似乎没有减少我的列表的长度,因此第一行代码可能无法正常工作。那么我该如何检查对象列表,然后删除所有我想要破坏的对象。
编辑: 是的我通过打印来检查列表中的对象是否正常,并且它们肯定小于屏幕高度。然而他们仍然是名单的一部分?所有这些都在游戏循环顺便说一句。因此,对于那些失控的子弹,每个刻度都应该有更新子弹组。
答案 0 :(得分:4)
您每次从3
减去buly
,因此永远不会超过screen.get_height()
。
根据游戏的工作方式,您应该将buly
与0
进行比较:
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)
您可能还会发现最好保留一个固定的项目符号池,而不是将它们添加到列表中,然后将其删除。相反,给他们一个标志来“停用”他们,这样他们就不会在每一帧都得到更新或绘制,然后在需要更多时“激活”一个新的。
如果您经常创建和销毁子弹对象,您将导致大量垃圾收集并在游戏中产生定期暂停。固定的对象池可以防止出现问题,并且可以避免一次性意外创建太多。