3.7中的Pyglet子类化子画面

问题描述 投票:0回答:1

在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)

是否有解决方法可以防止必须执行以下操作?

python-3.x pyglet
1个回答
0
投票

所以这对我有用,这就是我设置继承的精灵的方式。默认情况下,如果未指定批处理,我将创建一个批处理,有时会有所帮助。

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都更新为今天的最新版本),请添加注释并编辑您的问题,以显示如何初始化类。

© www.soinside.com 2019 - 2024. All rights reserved.