python-3.x - Pyglet 3.7 中的 Sprite 子类化
问题描述
在带有 Pyglet 1.5.2 的 python 3.7.7 中,我试图从 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 更新到今天的最新版本),请发表评论并编辑您的问题以显示您如何初始化您的类。
推荐阅读
- java - 我如何使用 Citizens API 生成 NPC?
- python - 检测python程序是否通过Windows GUI(双击)vs命令提示符执行
- r - 绘制指数或分位数色带在零附近发散的栅格
- c - C 中的运算符 &= 和 ~1U
- angular - 位置 0 的角度升级 CLI 意外令牌
- google-apps-script - getOwner() 在文件夹上的谷歌驱动器中失败
- php - Apache2 + PHP-FPM - 未定义函数 apache_getenv()
- azure-resource-manager - 如何在 ARM 模板中迭代内部依赖项?
- excel - 将 dll 函数加载到 Excel 365 中
- node.js - 页面刷新后Websocket重新连接