0

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

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

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

编辑:是的,我通过打印它们检查了对象是否在列表中,它们肯定小于屏幕高度。然而他们仍然是名单的一部分?所有这些都在游戏循环中。因此,每个滴答声都应该为那些失控的子弹更新 bulletGroup。

4

2 回答 2

4

您每次都在减去3buly所以它永远不会大于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
于 2012-12-29T06:02:34.697 回答
0

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

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

于 2012-12-29T10:09:58.593 回答