0

我正在尝试对一些简单的图像进行 blit,并学习使用 ImageGrid 和其他功能,但同样的错误不断弹出:

File "C:\Python27\lib\site-packages\pyglet\gl\lib.py", line 105, in errcheck
raise GLException(msg)
GLException: None

这是我的代码:

import pyglet
class test(pyglet.window.Window):
def __init__(self):
    super(game, self).__init__()
    img = pyglet.image.load('images/sprites.png')
    self.sprite = pyglet.resource.image('images/sprites.png')
    seq = pyglet.image.ImageGrid(img, 10, 9, 96, 96)
    self.sprite2 = pyglet.image.TextureGrid(seq)

def on_draw(self):
    self.sprite2.blit(25, 25, width=150, height=150)
4

1 回答 1

0

好吧,首先,您的缩进是错误的。

我还在第 4 行看到一个错误,即您的调用super()应该是:

super(test, self).__init__()

这有点违反直觉,但第一个参数应该是这个类的名称,也就是你定义的那个。

在第 5 行中,您将图像加载到变量img中,但在第 6 行中,您还将第 5 行中的相同图像加载到第二个变量中,即名为 的实例变量self.sprite。此实例变量不再使用。6号线是浪费。

回答您的实际问题:我认为您的错误在于您尝试定义on_draw事件的方式。您正在重载 pyglet.window.Window 类并尝试将on_draw事件直接作为方法重载,这不是它的设计工作方式。创建一个类来保存您的图像并在您的主 .py 文件中创建一个装饰器,它将绘制事件推送到窗口。

import pyglet

class Test(object):
    def __init__(self):
        super(Test, self).__init__()
        img = pyglet.image.load('images/sprites.png')
        // Removed prior self.sprite, as it was unneeded.
        // Renamed instance variable below.
        seq = pyglet.image.ImageGrid(img, 10, 9, 96, 96)
        self.sprite = pyglet.image.TextureGrid(seq)

// No indentation, so this is not in the test class.
test = Test()
window = pyglet.window.Window()

@window.event
def on_draw():
    // Don't forget to clear the window first!
    test.clear()
    test.sprite.blit(25, 25, width=150, height=150)

if __name__ == '__main__':
    pyglet.app.run()

试试看。不过,您的图像可能看起来有点奇怪,因为您的 blit 调用正在更改锚点并在两个方向上拉伸图像。

于 2013-05-20T06:23:08.093 回答