1

Python でクラスからオブジェクトを作成しようとしていますが、「e_tank = EnemyTank() TypeError: 'Group' object is not callable」というエラーが発生します。

これが何を意味するのかわかりません。Google を試しましたが、このエラーの原因について明確な答えを得ることができませんでした。EnemyTank クラスからオブジェクトを作成できない理由を誰かが理解していますか?

これが私のコードです:

#Image Variables
bg = 'bg.jpg'
bunk = 'bunker.png'
enemytank = 'enemy-tank.png'

#Import Pygame Modules
import pygame, sys
from pygame.locals import *

#Initializing the Screen
pygame.init()
screen = pygame.display.set_mode((640,360), 0, 32)

background = pygame.image.load(bg).convert()



bunker_x, bunker_y = (160,0)



class EnemyTank(pygame.sprite.Sprite):
    e_tank = pygame.image.load(enemytank).convert_alpha()
    def __init__(self, startpos):
        pygame.sprite.Sprite.__init__(self, self.groups)
        self.pos = startpos
        self.image = EnemyTank.image
        self.rect = self.image.get_rect()
    def update(self):
        self.rect.center = self.pos

class Bunker(pygame.sprite.Sprite):
    bunker = pygame.image.load(bunk).convert_alpha()
    def __init__(self, startpos):
        pygame.spriter.Sprite.__init__(self, self.groups)
        self.pos = startpos
        self.image = Bunker.image
        self.rect = self.image.get_rect()
    def getCollisionObjects(self, EnemyTank):
        if (EnemyTank not in self._allgroup, False):
            return False
        self._allgroup.remove(EnemyTank)
        result = pygame.sprite.spritecollide(EnemyTank, self._allgroup, False)
        self._allgroup.add(EnemyTank)
    def update(self):
        self.rect.center = self.pos


#Setting Up The Animation
x = 0
clock = pygame.time.Clock()
speed = 250

allgroup = pygame.sprite.Group()
EnemyTank = allgroup
Bunker = allgroup

e_tank = EnemyTank()
bunker = Bunker()5

#Main Loop
while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

    screen.blit(background, (0,0))
    screen.blit(bunker, (bunker_x, bunker_y))
    screen.blit(e_tank, (x, 0))
    pygame.display.flip()

    #Animation
    milli = clock.tick()
    seconds = milli/1000.
    dm = seconds*speed
    x += dm

    if x>640:
        x=0


    #Update the Screen
    pygame.display.update()
4

5 に答える 5

4

EnemyTankというクラスを宣言し、次の行で上書きしました。

EnemyTank = allgroup

この時点以降の EnemyTank はクラスではなくグループであり、呼び出し可能ではなくなります。あなたがしたいことは次のとおりです。

allgroup pygame.sprite.Group()
e_tank = EnemyTank()
allgroup.add(e_tank)
# Or..
e_tank.add(allgroup)
于 2012-11-15T22:55:45.210 に答える
1

これがあなたの問題です:

Groupクラスをインスタンス化します。

allgroup = pygame.sprite.Group() :

次に、オブジェクトを EnemyTank 変数に入れます

EnemyTank = allgroup

次に、EnemyTankオブジェクトを呼び出そうとします。

e_tank = EnemyTank()
于 2012-11-15T22:56:47.533 に答える
1

Group クラスをインスタンス化したようです:

allgroup = pygame.sprite.Group()

そして、オブジェクトを呼び出そうとします:

EnemyTank = allgroup
e_tank = EnemyTank()

__call__()pygame.sprite.Group クラスはメソッドを定義していないため、呼び出すことができないと思います

于 2012-11-15T22:57:11.557 に答える
0

クラスを定義しEnemyTankますが、同じ名前の新しい変数を作成します。EnemyTank

bunker = Bunker()5#これも無効です

スプライトグループを使用するには、次のようにします。

player = PlayerTank()
tanks = [ Tank() for x in range(5) ]
tanks.append( player )

次に:描画

tank.draw(screen)

衝突:spritecollideまたはその他の衝突関数:http ://www.pygame.org/docs/ref/sprite.html

参照:http ://www.pygame.org/docs/ref/sprite.html#pygame.sprite.Group

于 2012-11-16T01:47:47.100 に答える
0

すでに述べたことに加えて、別のインスタンスでは変数名の繰り返しに非常に近いことも付け加えておく必要があります。実際にはそうすべきではありません。EnemyTankこれが私が見ることができるようなもののすべての例です。

enemytank = 'enemy-tank.png'
class EnemyTank(pygame.sprite.Sprite):
EnemyTank = allgroup
于 2012-11-15T23:13:29.380 に答える