2013-05-07 191 views
0

我想的blit一些简单的图片,并学会使用ImageGrid等功能,但同样的错误不断弹出:这个pyglet错误是什么意思?

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) 

回答

0

好,首先,你的缩进是错误的。

我也看到在第4行的错误,这是您要super()调用应该是:

super(test, self).__init__() 

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

在第5行你的图像加载到变量img,但在第6行也加载从管线5相同的图像为第二变量,命名self.sprite一个实例变量。这个实例变量是从未再次使用。 6号线是一种浪费。

要回答你的实际问题:我认为你的错误在于你如何试图定义你的on_draw事件。你正在重载pyglet.window.Window类,并试图直接作为一个方法重载事件,这不是它的设计原理。创建一个类来保存你的图像,并在主要的.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调用正在改变锚点并在两个方向上拉伸图像。