python - 我使用 pyglets Sprite.delete() 错误吗?

标签 python sprite pyglet

我想删除一个 pyglet Sprite 。我正在尝试在 Sprite 对象上使用 delete() 方法。 以下测试脚本...

import pyglet

window = pyglet.window.Window()

x = pyglet.sprite.Sprite(img=pyglet.image.load('resource/icon.png'))
draw_objects = [x]


@window.event
def on_draw():
    window.clear()
    for obj in draw_objects:
        obj.draw()


@window.event
def on_key_press(symbol, modifiers):
    if symbol == pyglet.window.key.DELETE:
        print('deleting')
        global x
        x.delete()


pyglet.app.run()

...产生此错误:

Traceback (most recent call last):
  File "C:\Users\Finn\Data\PythonProjects\_tests\firstPyglet\test.py", line 24, in <module>
    pyglet.app.run()
  File "C:\Users\Finn\Data\PythonProjects\_tests\firstPyglet\venv\lib\site-packages\pyglet\app\__init__.py", line 107, in run
    event_loop.run()
  File "C:\Users\Finn\Data\PythonProjects\_tests\firstPyglet\venv\lib\site-packages\pyglet\app\base.py", line 167, in run
    timeout = self.idle()
  File "C:\Users\Finn\Data\PythonProjects\_tests\firstPyglet\venv\lib\site-packages\pyglet\app\base.py", line 243, in idle
    window.dispatch_event('on_draw')
  File "C:\Users\Finn\Data\PythonProjects\_tests\firstPyglet\venv\lib\site-packages\pyglet\window\__init__.py", line 1333, in dispatch_event
    if EventDispatcher.dispatch_event(self, *args) != False:
  File "C:\Users\Finn\Data\PythonProjects\_tests\firstPyglet\venv\lib\site-packages\pyglet\event.py", line 408, in dispatch_event
    if handler(*args):
  File "C:\Users\Finn\Data\PythonProjects\_tests\firstPyglet\test.py", line 13, in on_draw
    obj.draw()
  File "C:\Users\Finn\Data\PythonProjects\_tests\firstPyglet\venv\lib\site-packages\pyglet\sprite.py", line 672, in draw
    self._group.set_state_recursive()
AttributeError: 'NoneType' object has no attribute 'set_state_recursive'

是我的代码有问题,还是 pyglet 有问题?

最佳答案

x.delete()之后添加draw_objects.remove(x)。该错误是由于您试图在先前已删除的相应函数中绘制 Sprite ,但尚未从绘图列表中删除其变量而引起的。

@window.event
def on_key_press(symbol, modifiers):
    global x
    if symbol == pyglet.window.key.DELETE:
        if x in draw_objects:
            print('deleting')
            x.delete()
            draw_objects.remove(x)

关于python - 我使用 pyglets Sprite.delete() 错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61942772/

相关文章:

python - 导入 WebKit 会导致应用程序在启动时失败。

python - Tensorflow GPU 未使用,但明显可用

python - 基本的 openGL、顶点缓冲区和 pyglet

python - 如何使用 pyglet 循环限制 cpu 使用?

python - Django mysql错误

javascript - Python:登录到网页并单击没有 Selenium 的按钮

css - 图像 Sprite 和跨浏览器兼容性问题

unity-game-engine - unity2d spritesheet和spritepacker有什么区别?

java - 不同屏幕尺寸上的 Sprite 速度

python - 在 PyQt6 窗口中渲染 pyglet 窗口?