2013-12-23 55 views
0

我正在pyglet中进行游戏,这是第一次,虽然通常我使用pygamePyglet子类对象没有属性

我想在pyglet中创建子类。

class menu(pyglet.sprite.Sprite): 

    def __init(self, *args, **kwargs): 
     super(menu, self).__init__(self, *args, **kwargs) 
     self.labels = {} 


class pause_menu(menu): 

    def __init__(self, *args, **kwargs): 
     super(pause_menu, self).__init__(self, *args, **kwargs) 

     self.labels['resume'] = pyglet.text.Label('Resume Game', font_name='Times New Roman', font_size=36, x=window.main.width//2, y=window.main.height//2) 

我收到此错误

File "C:\Python33\lib\site-packages\pyglet\sprite.py", line 225, in __init__ 
self._texture = img.get_texture() 
AttributeError: 'pause_menu' object has no attribute 'get_texture' 'get_texture'. 

这是怎么回事?我用超级错了吗?

BTW: 类正在从另一个模块

pause_menu = menu.pause_menu(x=0, y=0, batch=menu_batch, img=None) 
+0

你的意思是从__init __(self,* args,** kwargs)中删除self,它出现了相同的错误 – Temere

+0

您可以在*两个*位置使用它,其中一个永远不会被调用。 –

回答

1

要调用父__init__错误的调用;使用super(menu, self).__init__(*args, **kwargs)。方法是super()为您绑定。您也错过了menu.__init__,最后缺少双下划线。

class menu(pyglet.sprite.Sprite): 
    def __init__(self, *args, **kwargs): 
     super(menu, self).__init__(*args, **kwargs) 
     self.labels = {} 

class pause_menu(menu): 
    def __init__(self, *args, **kwargs): 
     super(pause_menu, self).__init__(*args, **kwargs) 
     self.labels['resume'] = pyglet.text.Label('Resume Game', font_name='Times New Roman', font_size=36, x=window.main.width//2, y=window.main.height//2) 

因为你在self通过明确的pyglet.sprite.Sprite.__init__()被调用位置参数,既引用self

因此,第二个self参数被视为img argumentpyglet试图对其调用AbstractImage.get_texture() method

+0

我明白你的意思,但它仍然不起作用? – Temere

+0

定义'仍然不工作'?你仍然得到同样的例外吗?或者你现在有不同的例外吗?如果你有完全相同的异常,你确定你保存了源文件并重新启动了python脚本吗?如果您在某处引入额外的“print()”行,会发生什么情况? –

+0

同样的例外,如果我在super之前添加一条打印线,我会得到的是hello和错误 – Temere