2016-01-20 55 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'標籤 - 並且您的代碼將被着色並且更具可讀性。 – furas

+0

看起來你的一堆代碼在做一些愚蠢的事情。爲什麼當他們中的一個出界時,你會清空精靈列表?當然,你只想移除界外精靈,而不是所有其他的?假設這些'list'實際上是PyGame'group'對象,當Sprite檢測到它超出邊界時,您可能想調用'self.kill()'。這會將它從組中刪除,而不會刪除該組中的所有其他精靈。 – Blckknght

+0

謝謝我查看了self.kill()函數,這使得我用noob方式更有意義!謝謝! – Jim

回答

0

嘗試改變:

bullet_list_h.add(h_bullet)

要:

bullet_list_h.add(hbullet)

爲了確保您要添加的水平你剛剛創建的子彈,而不是沒有聲明的子彈。

+0

噢嗯...這真的是我的愚蠢......非常感謝! – Jim

相關問題