2013-05-07 4 views
0

Je suis en train de blit quelques images simples, et apprendre à utiliser ImageGrid et d'autres fonctions, mais cette même erreur ne cesse d'apparaître:Que signifie cette erreur pyglet?

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

Ceci est mon code:

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) 

Répondre

0

Eh bien, Tout d'abord, vos indentations sont fausses.

Je vois aussi une erreur dans la ligne 4, qui est que votre appel à super() devrait être:

super(test, self).__init__() 

Il est un peu contre-intuitif, mais le premier argument doit être le nom de cette classe , celui que vous définissez.

Dans la ligne 5 que vous chargez une image dans la variable img, mais dans la ligne 6 vous aussi charger la même image de la ligne 5 en une seconde variable, une variable d'instance nommée self.sprite. Cette variable d'instance est jamais plus utilisée. La ligne 6 est un déchet.

Pour répondre à votre question actuelle: Je pense que votre erreur est dans la façon dont vous essayez de définir votre événement on_draw. Vous surchargez la classe pyglet.window.Window et tentez de surcharger l'événement on_draw directement en tant que méthode, ce qui n'est pas la façon dont il est conçu pour fonctionner. Créez une classe pour contenir votre image et créez un décorateur dans votre fichier .py principal, ce qui pousse l'événement draw vers la fenêtre.

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() 

Essayez-le. Cependant, votre image sera probablement un peu bizarre, car votre appel blit change le point d'ancrage et étire l'image dans les deux directions.