在python 3.7.7和Pyglet 1.5.2中我正在尝试从pyglet的Sprite继承
但是,如果我输入图像x,y,它们是初始化sprite类所需的前3个参数。它会立即收集垃圾]
我想继承pyglet的Sprite而不发生这种情况
class BaseEntity(pyglet.sprite.Sprite):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
解决此问题的唯一方法是通过不继承类并在对象内部创建子画面
class BaseEntity:
def __init__(self, *args, **kwargs):
# This works because the sprite object is referenced, so it won't be GC'd
# I don't want to do this though
self.Sprite = pyglet.sprite.Sprite(*args, **kwargs)
是否有解决方法可以防止必须执行以下操作?
所以这对我有用,这就是我设置继承的精灵的方式。默认情况下,如果未指定批处理,我将创建一个批处理,有时会有所帮助。
class genericSprite(pyglet.sprite.Sprite):
def __init__(self, image, *args, **kwargs):
if not 'batch' in kwargs: kwargs['batch'] = pyglet.graphics.Batch()
if not 'x' in kwargs: kwargs['x'] = 0
if not 'y' in kwargs: kwargs['y'] = 0
self.texture = pyglet.image.load(image)
pyglet.sprite.Sprite.__init__(self, self.texture, **kwargs)
def render(self):
self.batch.draw()
我对这段代码的垃圾回收没有问题。现在,我运行了您的代码,但无法重现该问题,因此我怀疑这与您设置BaseEntity
调用的方式有关。因此,如果这对您不起作用((我也建议您将Python和Pyglet都更新为今天的最新版本),请添加注释并编辑您的问题,以显示如何初始化类。