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
を参照してください。 – SiHa
今、powerupと弾丸が衝突したとき、私はself.kill()を書きましたが何も起こっていません – turtlefish12
'self.kill()'行が実行されているかどうかチェックしましたか?あなたのコードは決してこの行を実行しないでしょうか?または、エラーメッセージが表示されることがあります。あなたはそれを確認しましたか? – furas