私はPygameを使ってゲームを書いています。今ではゲーム内のモンスターにスポーンタイマーを追加したいところです。今、タイマーが正常に動作し、最初のスポーン波が作られますと、すべてがそれが言う第二波まで素晴らしいと素晴らしいです:今、この私は得ることはありません、それはすでにそれを呼ばれるので、Python、Pygame、Classオブジェクトはもはや呼び出し可能ではありません
Monster1 = Monster()
TypeError: 'Monster' object is not callable
それまでのラウンド。
私はクラス内の機能を変更しているのか、それ以上呼び出し可能にならないようにしているのかを確認するために、テキストを何度も見てきましたが、私はそれを取得しません。
このループが行うには、あなただけの私に言うとした場合、私はそれを を追加します知っておく必要があるだろう何かがあればこれはモンスタークラス
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
あるモンスター
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
を生成しますこれは本当に面倒です。私は初めてStackOverFlowのウェブサイトを使用しています。$
コードのどこかに、「Monster = something」があります。これは、作成されたクラスをシャドウします。 –
^編集ありがとうございました。私は以前このサイトを使ったことはありません。あなたはすばらしい人です –
@ŁukaszRogalskiが示唆しているのは最も有望な原因です。 [PEP8](https://www.python.org/dev/peps/pep-0008/)のコーディングスタイルに従えば、変数名は通常小文字で指定されます。つまり、 'Monster1 = Monster() 'から' monster1 = Monster() 'に変更します。あなたはすぐにあなたの問題をゼロにすることができるはずです。 – nluigi