Python + Pyglet Cocos2D: TypeError: '类'对象不可调用

0 投票
1 回答
535 浏览
提问于 2025-04-17 13:27

我一直在做一个瓦片地图的渲染器,想把它放到另一个文件里,单独写一个类。结果我遇到了这个错误信息:

Type Error: 'renderer' object is not callable

这是我的 render.py 文件:

import pyglet, json
from pyglet.window import key
from pyglet.gl import *
from ConfigParser import SafeConfigParser
from cocos.layer import *
from cocos.batch import *
from cocos.sprite import Sprite

class renderer( Layer ):
    def __init__(self, mapname):
        super( renderer, self ).__init__()
        parser = SafeConfigParser()
        try:
            world = parser.read('maps/'+mapname+'.txt')
            print world
        except IOError:
            print("No world file!")
            return
        layer = json.loads(parser.get('layer1', 'map'))
        tiletype = parser.get('type', 'tile')
        print tiletype
        tilesize = 64

        for x in range(0, len(layer)):
            for y in range(0, len(layer[x])):
                self.spr = Sprite("image/tiles/"+tiletype+"/"+str(layer[x][y])+".png")
                self.spr.position = ((x+1)*tilesize, (y+1)*tilesize)
                self.add(self.spr)

这是我调用它的那段代码:

from other.render import renderer

 

world = renderer('buildnew')
world()

文件结构:

game/main.py
game/other/render.py

我哪里做错了呢?

1 个回答

0
world = renderer('buildnew')
world()

首先,你创建了一个渲染器类的实例,并把它存储到变量叫做world里。但是接着你写了world(),这是错误的,因为这个对象不能被调用。如果你想让world变成一个可以调用的对象,你需要在渲染器类里面实现一个叫做__call__的方法。

撰写回答