我正在使用Pygame編寫遊戲,現在我遇到了這個問題,我想在遊戲中的怪物上添加一個產卵計時器。現在計時器工作正常,第一產卵波被製成,一切是偉大的,了不起的,直到第二次浪潮,它說:Python,Pygame,Class對象不再可調用
Monster1 = Monster()
TypeError: 'Monster' object is not callable
現在,這個我不明白,因爲它已經把它稱爲在在此之前的一輪。
我仔細檢查過我的文本,看看我是否正在改變課程中的任何功能或使其不應該被調用,但我只是不明白。
這個循環使得派生妖怪
while Game:
if time.clock() - WaveTimer > 10:
WaveTimer = time.clock()
print "The Moon is full"
for i in range(3*SpawnRate):
Monster1 = Monster()
monster_list.add(Monster1)
character_list.add(Monster1)
SpawnRate += 1
這是怪獸級的
class Monster(Character):
Current_HP = 50
Max_Hp = 50
walking_frame = []
fighting_frame = []
hit_frame = []
Fighting = False
Flag = True
frame1= 0
LastFrame1 = 0
TimeBetweenAtkFrames = 0.1
X_Speed = 0
Y_Speed = 0
damaged = False
RecordedAni = True
damagedspeed = 1
image_file = "C:/Users/Gideon/PycharmProjects/untitled1/Sprite Images/All.png"
sprite_sheet = SpriteSheet(image_file)
hitimage = sprite_sheet.get_image(96, 336, 48, 48)
hitimage = pygame.transform.scale(hitimage, (50, 50))
for i in range(5):
image = sprite_sheet.get_image(i * 48, 288, 48, 48)
fighting_frame.append(image)
for i in range(4):
image = sprite_sheet.get_image(i * 48, 144, 48, 48) # Temp
walking_frame.append(image)
for i in range(4):
image = sprite_sheet.get_image(i * 48, 192, 48, 48) # Temp
walking_frame.append(image)
image = sprite_sheet.get_image(0, 144, 48, 48)
image = pygame.transform.scale(image, (50, 50))
orgimage = image
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.Loc_x = random.randrange(20,700)
self.Loc_y = random.randrange(20,100) # temp
self.rect = self.image.get_rect()
self.rect.left, self.rect.top = [self.Loc_x, self.Loc_y]
for i in range (2):
image = self.sprite_sheet.get_image(i * 48, 336, 48, 48)
self.hit_frame.append(image)
i += 1
def move(self,character):
if self.Alive:
if self.Current_HP < self.Max_Hp:
self.damagedspeed = 2
if character.Loc_x > self.Loc_x + 25:
self.X_Speed = 1.5 * self.damagedspeed
self.Loc_x += self.X_Speed
if character.Loc_x < self.Loc_x - 25:
self.X_Speed = 1.5 * self.damagedspeed
self.Loc_x -= self.X_Speed
if character.Loc_y > self.Loc_y + 25:
self.Y_Speed = 1.5 * self.damagedspeed
self.Loc_y += self.Y_Speed
if character.Loc_y < self.Loc_y - 25:
self.Y_Speed = 1.5 * self.damagedspeed
self.Loc_y -= self.Y_Speed
if (self.Flag):
self.Animation()
wall_hit_list = pygame.sprite.spritecollide(self, CollideList, False)
for wall in wall_hit_list:
if self.X_Speed > 0:
self.X_Speed = 0
self.Loc_x = self.Loc_x - 5
if self.X_Speed < 0:
self.X_Speed = 0
self.Loc_x = self.Loc_x + 5
if self.Y_Speed > 0:
self.Y_Speed = 0
self.Loc_y = self.Loc_y - 5
if self.Y_Speed < 0:
self.Y_Speed = 0
self.Loc_y = self.Loc_y + 5
self.FightAnimation(character)
self.image = pygame.transform.rotate(self.orgimage, self.Angle)
self.rect = self.image.get_rect()
self.rect.left, self.rect.top = [self.Loc_x, self.Loc_y]
self.X_Speed = 0
self.Y_Speed = 0
def FightAnimation(self,character):
# Monster Fight Animation
if character.Loc_x <= self.Loc_x + 25 and character.Loc_x >= self.Loc_x - 25:
if character.Loc_y <= self.Loc_y + 25 and character.Loc_y >= self.Loc_y - 25:
if(self.Fighting == False):
self.LastFrame1 = time.clock()
self.Fighting = True
if (self.frame1 < len(self.fighting_frame)):
self.Flag = False
self.image = self.fighting_frame[self.frame1]
self.image = pygame.transform.scale(self.image, (60, 60))
self.orgimage = self.image
if (self.frame1 == 3):
character.Current_HP -= 20
self.frame1 += 1
else:
self.frame1 = 0
else:
if (self.frame1 != 0):
self.frame1 = 0
self.Flag = True
else:
if (self.frame1 != 0):
self.frame1 = 0
self.image = self.fighting_frame[self.frame1]
self.image = pygame.transform.scale(self.image, (60, 60))
self.orgimage = self.image
self.Flag = True
if self.Fighting and time.clock() - self.LastFrame1 > self.TimeBetweenAtkFrames:
self.Fighting = False
如果有其他任何你需要知道的只是告訴我,我將它添加 如果這真的很凌亂我很抱歉它第一次使用StackOverFlow網站:$
你的代碼中的某個地方有'Monster = something',這個陰影創建了類。 –
^感謝您的編輯。我以前從未使用過此網站。你是美好的人 –
什麼@ŁukaszRogalski建議是最有可能的罪魁禍首。在這種情況下, [PEP8](https://www.python.org/dev/peps/pep-0008/)的編碼風格將幫助您,因爲變量名通常用小寫字母指定,即更改實例,如「Monster1 =怪物()'到'怪物1 =怪物()'。你應該能夠快速解決你的問題。 – nluigi