2016-01-20 3 views
0

Благодаря помощи людей на этом сайте мне удалось получить пули, стреляющие по уровню на моей платформенной игре. Огонь непрерывно и перемещается вертикально, пока не достигнет пола, а затем они исчезнут. Тем не менее, я хотел добавить горизонтальные стреляющие пули на этом уровне, и я сделал тот же самый код, что и мои вертикальные пули, и тем не менее он срабатывает только один, и он не запускает никаких других горизонтальных пуль. Он запускает одну горизонтальную пулю, идет к границе моего экрана, после чего после нее не появляются другие пули. Любая помощь будет одобрена!Не все мои пули стреляют

class VerticalBullets(pygame.sprite.Sprite): 
    def __init__(self,x,y): 
     pygame.sprite.Sprite.__init__(self) 

     self.image = pygame.image.load("Images/bullet.png") 
     self.rect = self.image.get_rect() 
     self.rect.x = x 
     self.rect.y = y 

    def update(self): 
     self.rect.y += 7 

     if self.rect.y > 520: 
      bullet_list_v.empty() 

class HorizontalBullets(pygame.sprite.Sprite): 
    def __init__(self,x,y): 
     pygame.sprite.Sprite.__init__(self) 

     bullet_image = pygame.image.load("Images/bullet.png") 
     self.image = pygame.transform.rotate(bullet_image,-90) 
     self.rect = self.image.get_rect() 
     self.rect.x = x 
     self.rect.y = y 

    def update(self): 
     self.rect.x -= 5 

     if self.rect.x < 30: 
      bullet_list_h.empty() 

def main3(): 
    TrapList.empty() 
    TrapList.add(trap4) 
    player.hspeed = 0 
    player.rect.x,player.rect.y = 50,0 

    bullet_list_v.empty() 
    bullet_list_h.empty() 

    FiringBullet = pygame.USEREVENT + 1 
    pygame.time.set_timer(FiringBullet, 1500) 

    GameExit = False 

    while GameExit==False: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
      pygame.quit() 
      quit() 

      if event.type == pygame.KEYDOWN: 
       if event.key == pygame.K_LEFT: 
        player.move(-player.speed,0) 
       if event.key == pygame.K_RIGHT: 
        player.move(player.speed,0) 
       if event.key == pygame.K_UP: 
        player.move(0,-player.Jump) 

      if event.type == pygame.KEYUP: 
       if event.key == pygame.K_LEFT: 
        player.move(player.speed,0) 
       if event.key == pygame.K_RIGHT: 
        player.move(-player.speed,0) 
       if event.key == pygame.K_UP: 
        player.move(0,0) 

      if event.type == FiringBullet: 
       bullet = VerticalBullets(400,200) 
       bullet2 = VerticalBullets(500,200) 
       bullet3 = VerticalBullets(625,200) 
       hbullet = HorizontalBullets(700,400) 
       bullet_list_v.add(bullet) 
       bullet_list_v.add(bullet2) 
       bullet_list_v.add(bullet3) 
       bullet_list_h.add(h_bullet) 

     screen.fill(BLACK) 
     level3.update() 

     for eachbullet in bullet_list_v: 
      bullet_list_v.draw(screen) 
      bullet_list_v.update() 

     for eachbullet in bullet_list_h: 
      bullet_list_h.draw(screen) 
      bullet_list_h.update() 

     if player.rect.y < 0: 
      NextLevel3() 

     TrapList.draw(screen)  
     trampoline.render() 
     playergroup.update() 
     playergroup.draw(screen) 
     player.level_3_collisions(BlockListDirt2) 
     pygame.display.update() 
     clock.tick(60) 
+0

предложение: добавить тег 'python' - и ваш код будет окрашен SO и более читаемым. – furas

+0

Кажется, что куча вашего кода делает глупый материал. Почему вы опустошаете списки спрайтов, когда один из них выходит за пределы? Неужели вы хотите только удалить лишний спрайт, а не все остальные? Предполагая, что эти '' '' '' '' '' '' '' '' '' '' '' '' '' '' PyGame, вы, вероятно, захотите вызвать 'self.kill()', когда Sprite обнаруживает, что это вне границ. Это удалит его из своих групп, не удаляя все остальные спрайты в этой группе. – Blckknght

+0

Спасибо, я посмотрел на функцию self.kill(), и это делает намного больше смысла, используя это, а затем мой способ noob! благодаря! – Jim

ответ

0

Попробуйте изменить:

bullet_list_h.add (h_bullet)

To:

bullet_list_h.add (hbullet)

Чтобы убедиться, что вы добавляете горизонтальный который вы только что создали, а не тот, который не был объявлен.

+0

oh ummmm ... это было действительно глупо от меня ... Спасибо большое! – Jim

Смежные вопросы