修改:已解决。感谢帮助人员,但似乎问题是列表被覆盖并转换为精灵组,使所有列表操作无效。
我最近开始在python中编程(总是引发警钟),所以如果我编写的东西的方式有些可怕,我道歉。此特定程序导入 pygame (正在使用的'引擎')。
我正在尝试创建一个包含对象/精灵的列表。我似乎已经实现了这一点,但是,一旦不再需要该对象,我就有一个问题,因为对象没有特定的指针,据我所知。
精灵类的构造如下:
class Point(pygame.sprite.Sprite):
def __init__(self,pos=(0,0)):
pygame.sprite.Sprite.__init__(self)
#Unimportant code
self.dead=False
print self
#This prints; "<Point sprite(in 0 groups)>"
def update(self):
if(self.dead):
#sprList_PointSet.remove(?)
pass
创建对象和列表;
sprList_PointSet=[]
sprList_PointSet+=[Point((50,90))]
sprList_PointSet+=[Point((65,110))]
# ...
print sprList_PointSet
#This prints; [<Point sprite(in 0 groups)>, <Point sprite(in 0 groups)>, ...]
在没有明显内存指示符的情况下,有没有办法在不再需要时使用.remove(x)从列表中删除实例?如果不是/或/并且有人可以推荐更好的方法。
答案 0 :(得分:2)
self
指向您要删除的对象,因此只需remove(self)
:
def update(self):
if self.dead:
try:
sprList_PointSet.remove(self)
except ValueError:
pass
remove
是为mutable sequences定义的,描述为in the tutorial:
从列表中删除值为x的第一项。如果没有这样的项目,则会出错。
答案 1 :(得分:2)
当没有“重要”的东西需要时,你可以使用weak references让实例消失。