<p>根据ImageMouseCursor类的pyglet文档<a href="https://pyglet.readthedocs.io/en/latest/modules/window.html" rel="nofollow noreferrer">link</a>方法draw(x,y)是抽象的。因此,我尝试过对ImageMouseCursor进行子分类,并实现如下绘制方法:</p>
<pre><code> import pyglet
pyglet.resource.path = ['resources']
pyglet.resource.reindex()
# subclass definition
class GameMouse(pyglet.window.ImageMouseCursor):
# class initialization
def __init__(self):
self.game_cursor = pyglet.resource.image('game_cursor.png')
super().__init__(self.game_cursor, 0, 34)
# method override
def draw(self, x, y):
self.game_cursor.blit(x, y)
</code></pre>
<p>但是,如果未启用总账混合,这将不起作用。需要gl混合来显示alpha通道。我通过对Window类进行子分类并使用glEnable/glBlendFunc函数来启用它。这是代码中执行以下操作的部分:</p>
<pre><code> # subclass definition:
class GameApp(pyglet.window.Window):
# class initialization
def __init__(self):
super(GameApp, self).__init__()
pyglet.gl.glEnable(pyglet.gl.GL_BLEND)
pyglet.gl.glBlendFunc(pyglet.gl.GL_SRC_ALPHA,
pyglet.gl.GL_ONE_MINUS_SRC_ALPHA)
</code></pre>
<p>希望这有帮助</p>