尝试在Python中创建对象时出错

时间:2012-11-15 22:50:51

标签: python object pygame

我正在尝试从python中的类创建一个对象但是我得到一个错误,“e_tank = EnemyTank() TypeError:'Group'对象不可调用“

我不确定这意味着什么,我已经尝试了谷歌,但我无法得到导致此错误的明确答案。有谁知道为什么我无法从我的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()

5 个答案:

答案 0 :(得分:4)

你已经宣布了一个名为 EnemyTank 的课程,然后你用这一行覆盖了它:

EnemyTank = allgroup

此后EnemyTank不是一个类,而是一个组,并且不再可调用。你想要做的是:

allgroup pygame.sprite.Group()
e_tank = EnemyTank()
allgroup.add(e_tank)
# Or..
e_tank.add(allgroup)

答案 1 :(得分:1)

这是你的问题:

您实例化组

allgroup = pygame.sprite.Group() :

然后将对象放入EnemyTank变量

EnemyTank = allgroup

然后你尝试调用EnemyTank 对象

e_tank = EnemyTank()

答案 2 :(得分:1)

看起来你已经实例化了一个Group类:

allgroup = pygame.sprite.Group()

然后你试着调用这个对象:

EnemyTank = allgroup
e_tank = EnemyTank()

我猜pygame.sprite.Group类没有定义__call__()方法因此无法调用

答案 3 :(得分:0)

除了已经提到的,我还应该补充一点,你在另一个实例中非常接近重复变量名,你应该不这样做。这是我能看到的EnemyTank之类的每个实例。

enemytank = 'enemy-tank.png'
class EnemyTank(pygame.sprite.Sprite):
EnemyTank = allgroup

答案 4 :(得分: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