LoginSignup
1
1

More than 5 years have passed since last update.

PygameでShootingゲーム 03

Last updated at Posted at 2018-10-12

目標:

前回: PygameでShootingゲーム02

Pygame でShootingゲームを作る 03

Tasks

  • このままだとbulletとbulletの間の間隔が短すぎる
  • Playerクラスにself.shoot_delay属性を入れる(bulletの間隔 millisecond)
  • Playerクラスにself.last_shot属性を入れる
  • 最後に撃ったbulletの時間を格納
  • pygame.time.get_ticks()でその瞬間の時間を格納
  • 現在の時間とlast_shotの時間を比較し、shoot_delayの間隔より大きくなったら次のbulletを撃っても良いようにする
  • Playerクラスのshoot()を更新する

Playerクラスにself.shoot_delay属性を入れる(bulletの間隔 millisecond)

NEW

  1. self.shoot_delay属性を設定
  2. self.last_shot属性を設定
  3. shoot()が多く変化
    • now に現在の時間を格納
    • nowlast_shotの時間の差をshoot_delayと比較
    • shoot_delayより大きかったらshoot()を実行
      • Bullet()インスタンスを作成、bulletに格納
      • all_spritesbulletSpriteグループに足す
class Player(pygame.sprite.Sprite):
    # sprite for the Player
    def __init__(self):
        super().__init__()
        self.image = pygame.transform.scale(player_img, (50, 38))
        self.image.set_colorkey(BLACK)
        self.rect = self.image.get_rect()
        self.rect.centerx = WIDTH / 2
        self.rect.bottom = HEIGHT - 10
        self.speedx = 0

        # +++ NEW!!!! +++
        # Bulletの間隔を空ける時間
        self.shoot_delay = 150
        # 最後に撃ったBulletの時間
        self.last_shot = pygame.time.get_ticks()

    def update(self):
        self.speedx = 0

        keystate = pygame.key.get_pressed()
        if keystate[pygame.K_LEFT]:
            self.speedx = -10
        if keystate[pygame.K_RIGHT]:
            self.speedx = 10

        # Bullet を撃つ
        if keystate[pygame.K_SPACE]:
            self.shoot()

        self.rect.x += self.speedx

        if self.rect.right > WIDTH:
            self.rect.right = WIDTH
        if self.rect.left < 0:
            self.rect.left = 0

    # BulletをPlayerが撃つ
    def shoot(self):
        # +++ NEW!!!! +++
        # 現在の時間をnowに格納
        now = pygame.time.get_ticks()
        # 現在の時間と最後に撃った時間(last_shot)をshoot_delay属性と比較
        if now - self.last_shot > self.shoot_delay:
            # 最後に撃ったbulletの時間を現在に更新
            self.last_shot = now
            bullet = Bullet(self.rect.centerx, self.rect.top)
            all_sprites.add(bullet)
            bullets.add(bullet)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1