在游戏开始之前,从类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, mobs, False, 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, (self.rect.x+20,self.rect.y-100, 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
基本上,我试图创造一个僵尸的浪潮,但产生的僵尸都以某种方式相互联系,就像当一个死亡时,所有其他人都与之一起死亡,等等
而不是在序列上迭代:
迭代
spritecollide
返回的精灵列表:因为它已经返回来自
mobs
的所有与player
冲突的精灵在代码中,实际上并不知道
spritecollide
返回什么您可能应该删除
zombie
列表,或者至少停止通过索引访问其元素相关问题 更多 >
编程相关推荐