Pyglet子类对象没有属性

时间:2013-12-23 08:36:47

标签: python python-3.x pyglet

我正在开发pyglet游戏,这是第一次,虽然通常我会使用pygame

我正在尝试在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'.

发生了什么事?我使用超级错误吗?

顺便说一句: 该类正在从另一个模块中调用

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

1 个答案:

答案 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