2017-12-06 10 views
0

私は今弾を撃ち出し、パワーアップにうまく衝突しようとしています。今、私の弾丸クラスにはcheckCollision関数があるので、これを実行することを期待しています。 GameScreenの更新クラスでbullet.updateも呼び出されているので、何が起きているのか分かりません。ここでBulletとPowerUPのショットが衝突した後、スプライトを削除しないself.kill()

は私の弾丸クラスである:ここで

class Bullet(Image): 

    def __init__(self, screen_size, width, height, filename, color = (255, 0, 0)): 

     super().__init__(screen_size, width, height, filename, color = (255, 0, 0)) 

    def checkCollision(self, powerup): 

     return pygame.sprite.collide_mask(self, powerup) 

    def removeBullet(self, powerup): 
     if self.checkCollision(powerup): 
      self.kill() 

    def update(self, powerup): 
     self.rect.centerx += 3 
     self.removeBullet(powerup) 

は、私はすべてを実行します。ここで私のパワーアップクラス

class PowerUp(Image): 


    kill_time = 0 
    def __init__(self, screen_size, width, height, filename, color = (255, 0, 0)): 

     super().__init__(screen_size, width, height, filename, color = (255, 0 , 0)) 


     _centerx = random.randint(20, 1100) 
     self.radius = 10 
     self.rect = pygame.Rect(_centerx-self.radius, 
           _centery-self.radius, 
           self.radius*2, self.radius*2) 

    def update(self): 

     pass 

そして、ここでは次のとおりです。

class GameScreen(SceneBase): 

    randomNumber = random.randint(0, 2) 
    def __init__(self): 
     SceneBase.__init__(self) 
     self.bg = pygame.image.load("images/asianbackground.jpg") 
     self.my_font = pygame.font.SysFont("Arial", 50) 

     self.bullets_group = pygame.sprite.Group() 
     self.powerup_group = pygame.sprite.Group() 
     self.player_paddle = classes.PlayerPaddle(screen_size, 40, 100, SceneBase.player1_character, self.bullets_group) 

     self.ai_paddle = classes.AIPaddle(screen_size, 40, 100, SceneBase.characterlist[GameScreen.randomNumber]) 
     self.pong = classes.Pong(screen_size, 20, 20, "images/pokeball.png") 

     self.now1 = pygame.time.get_ticks() 



    def ProcessInput(self, events, pressed_keys): 
     for event in events: 
      self.player_paddle.handle_event(event) 

    def Update(self): 
     self.player_paddle.update() 
     self.ai_paddle.update(self.pong, self.player_paddle) 
     self.pong.update(self.player_paddle, self.ai_paddle) 


     # if someone reaches a score of 2, then exit the game 
     if self.player_paddle.score == 2 or self.ai_paddle.score == 2: 
      SceneBase.is_game_over = True 
      self.SwitchToScene(GameOverScreen()) 

     time_difference1 = pygame.time.get_ticks() - self.now1 


     current_time = pygame.time.get_ticks() 

     if time_difference1 >= 2000: 
      powerup = classes.PowerUp(screen_size, 40, 40, "images/ramen.png") 
      powerup.kill_time = current_time + 5000 
      self.powerup_group.add(powerup) 
      self.now1 = pygame.time.get_ticks() 


     current_time = pygame.time.get_ticks() 

     for powerup in self.powerup_group: 
      for bullet in self.bullets_group: 
       bullet.update(powerup) 
      if powerup.kill_time <= current_time: 
       self.powerup_group.remove(powerup) 



    def Render(self, screen): 
     screen.blit(self.bg, (0, 0)) 
     self.bullets_group.draw(screen) 
     self.powerup_group.draw(screen) 
     self.player_paddle.draw(screen) 
     self.ai_paddle.draw(screen) 
     self.pong.draw(screen) 

     #Make the text for the user 

     player_text = "Player 1" + ":" + str(self.player_paddle.score) 
     player_text_image = self.my_font.render(player_text, True, GREEN) 
     screen.blit(player_text_image, (screen_size[0] //4, screen_size[1] * 0.8)) 

     #Make the text for the AI 
     ai_text = "Player 2" + ":" + str(self.ai_paddle.score) 
     ai_text_image = self.my_font.render(ai_text, True, GREY) 
     screen.blit(ai_text_image, (3* screen_size[0] // 4, screen_size[1] * 0.8)) 

    def SwitchToScene(self, next_scene): 
     self.next = next_scene 
+0

を参照してください。 – SiHa

+0

今、powerupと弾丸が衝突したとき、私はself.kill()を書きましたが何も起こっていません – turtlefish12

+0

'self.kill()'行が実行されているかどうかチェックしましたか?あなたのコードは決してこの行を実行しないでしょうか?または、エラーメッセージが表示されることがあります。あなたはそれを確認しましたか? – furas

答えて

0

Spriteはとのリストを持っています彼が属するグループ。あなたは箇条書きで、このリストにbullet_groupを追加する必要があり、その後kill()はわずか3秒(3000ms)を生きなければならない。ここ

elif event.key == pygame.K_u: 
    bullet = Bullet(screen_size, 25, 25, "images/naruto.png", color = (255, 0 , 0)) 
    bullet.rect.centerx = self.rect.centerx 
    bullet.rect.centery = self.rect.centery 

    bullet.add(self.bullet_group) # <-- add group to bullet 

    self.bullet_group.add(bullet) 

グループbullet_group bulletから弾丸を削除します。
は、しかし、あなたの質問は何ですか?__init__self.lifetimeremoveBullet

class Bullet(Image): 

    def __init__(self, screen_size, width, height, filename, color = (255, 0, 0)): 

     super().__init__(screen_size, width, height, filename, color = (255, 0, 0)) 

     self.lifetime = pygame.time.get_ticks() + 3000 

    def checkCollision(self, powerup): 

     return pygame.sprite.collide_mask(self, powerup) 

    def removeBullet(self, powerup): 
     if pygame.time.get_ticks() >= self.lifetime: 
      self.kill() 
     elif self.checkCollision(powerup): 
      self.kill() 

    def update(self, powerup): 
     self.rect.centerx += 3 
     self.removeBullet(powerup)