2016-10-13 10 views
0

私は最近pygame.sprite.Spritesprite.Groupを(使用して開始している)クラスと私はかつて私のスプライトの問題に遭遇してきました私はもはや新しいクラスインスタンスを初期化することができず、代わりに "TypeError: 'NPC'オブジェクトは呼び出し可能ではありません。ここに私のコード(簡潔さのために削減)です。pygameの中pygame.sprite.Group後pygameのスプライトオブジェクト呼び出すことはできません()

class NPC(pygame.sprite.Sprite): 
    def __init__(self, start_x, start_y, image):... 
npc_pop=pygame.sprite.Group() 
locations=[(100,200), (300,300), (150,200)] 
def spawn_NPC(x, y): 
    image_SS = ss.image_at(rando(), colorkey=(255, 0, 128)) #random image from sprite-sheet 
    new_guy = NPC(x, y, image_SS) 
    npc_pop.add(new_guy) 
for c in locations: 
    spawn_NPC(c[0],c[1]) 
while gameLoop == True: 
    .... 
    npc_pop.draw(screen) 
    if len(npc_pop) < 2: 
     spawn_NPC(100,100) 

NPCがクラスとして動作し、問題なくスプライトコンテナnpc_popを埋めるゲームループの前に、NPCのクラスについてはあまり詳細に入るなし。しかし、NPCクラスの次のインスタンスは、spawn_NPC()にトレースされる最後の行のエラーを発生させる関数として呼び出されます。どうして?

私はこのスレッドGetting an Error Trying to Create an Object in Pythonを読んで、スプライトのグループ化が何らかの形でクラスを変更することを認識していますが、まだ論理を完全に理解していません。

+0

私たちはあなたのコードを読むことができないので、間違ったインデントがあります。コードを置く前に、すべての行の前に4つのスペースを追加してください。 – furas

+0

は常に完全なエラーメッセージを追加します。メッセージだけでなく、問題を起こしている行などもあります。 – furas

+0

リンクに記載されている問題は、グループとは何の関係もありません。例えば ​​'print =" Hello World "'を設定すると 'print(some_text)'は '' print 'は関数ではなく ''値を保持する変数であるので '' str' (some_text) 'は' 'Hello World ''(some_text)'を意味しているので、 'NPC = ...'や 'some_NCP_object = ...'のようなコード行で見つけなければなりません。 – furas

答えて

0

私はこのコードがもっとはっきりしていることを願っています。自分のNPCスプライトクラス用の専用モジュールを作成し、クラスジェネレータを作成することで問題を解決しました。

import walk #NPC class now imported from a module 
    @classmethod 
    def spawnNPC(self, list): 
    for c in list: 
     image_SS = ss.image_at(rando(), colorkey=(255, 0, 128)) 
     new_guy = walk.NPC(c[0],c[1],image_SS) 
     print type(new_guy), "googly" 
     new_guy.add(npc_pop) 

    #generate NPC instances at multiple locations before game start 
    MiniSpawn = type("MiniSpawn", (object,), {"spawnNPC":spawnNPC}) 
    locations = [(333, 200), (300, 300), (200, 200), (50, 50)] 
    MiniSpawn.spawnNPC(locations) 

    #Generate new NPC instances in the game loop 
    if started == 1 and len(npc_mov) < 2: 
     MiniSpawn.spawnNPC([(200,300)]) 
関連する問題