在游戏开始之前,通过从Mob类调用它来启动5个对象(僵尸)。然后,存储在名为zombie的列表中。
zombie = [None]*5
def newmob():
for i in range(5):
zombie[i] = Mob()
all_sprites.add(zombie[i])
mobs.add(zombie[i])
newmob()在进入游戏循环之前被调用。
newmob()
while running:
for i in range(len(zombie)):
hits = pygame.sprite.spritecollide(player,mobs,False,pygame.sprite.collide_mask)
if hits:
player.shoot = False
player.startShoot = True
zombie[i].damage()
if zombie[i].health() <= 0:
zombie[i].dying()
atks = pygame.sprite.spritecollide(barricade,pygame.sprite.collide_mask)
if atks:
zombie[i].attacking()
barricade.damage()
print(barricade.health())
if barricade.health() <= 0:
barricade.destroyed()
zombie[i].walking()
暴民类如下:
class Mob(pygame.sprite.Sprite):
zom3_walk = [pygame.image.load(path.join(img_folder,'3go_%s.png' % frame)) for frame in range(1,17)]
zom3_die = [pygame.image.load(path.join(img_folder,'3die_%s.png' % frame)) for frame in range(1,17)]
zom3_atk = [pygame.image.load(path.join(img_folder,'3hit_%s.png' % frame)) for frame in range(1,17)]
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = zom3_walk[0]
self.x = random.randrange(1000,1200)
self.y = 400
self.rect = self.image.get_rect()
self.rect.center = (self.x,self.y)
self.vx = random.uniform(0.02,1)
self.hpbar = 2
self.walkCount = 0
self.Dead = False
self.Attack = False
self.Walk = True
self.frame = 0
self.last_update = pygame.time.get_ticks()
self.frame_rate = 100
def die_animation(self):
now = pygame.time.get_ticks()
if self.frame < 16:
self.image = self.zom3_die[self.frame]
if now - self.last_update > self.frame_rate:
self.last_update = now
self.frame += 1
else:
self.kill()
def attack_animation(self):
if self.attacking:
now = pygame.time.get_ticks()
if self.frame < 16:
self.image = self.zom3_atk[self.frame]
if now - self.last_update > self.frame_rate:
self.last_update = now
self.frame += 1
else:
self.frame = 0
if now - self.last_update > 600:
self.frame = 0
def dying(self):
self.Dead = True
def attacking(self):
self.Attack = True
self.Walk = False
def walking(self):
self.Attack = False
self.Walk = True
def health(self):
return self.hpbar
def damage(self):
self.hpbar -=1
def update(self):
now = pygame.time.get_ticks()
pygame.draw.rect(screen,RED,(self.rect.x+20,self.rect.y-100,self.hpbar*100,45))
pygame.draw.rect(screen,WHITE,200,45),2)
if self.Attack:
self.vx = 0
self.attack_animation()
if self.Dead:
self.die_animation()
if self.Walk:
if now - self.last_update > 800:
if self.rect.x > 0:
self.vx = random.uniform(0.02,0.03)
self.rect.x -= self.vx
if self.walkCount + 1 >= 20:
self.walkCount = 0
if self.vx > 0:
self.image = self.zom3_walk[self.walkCount // 3]
self.walkCount += 1
基本上,我正在尝试创建一堆僵尸,但是生成的僵尸却以某种方式彼此关联,就像当一个人将所有其他死者一起死等时一样……