【问题标题】:How to control the fire rate of bullets?如何控制子弹的射速?
【发布时间】:2015-01-23 16:52:01
【问题描述】:

我已经工作了大约 2-3 天来控制我的射速,但我只是找不到成功的方法。我在这里看到了类似/相同的问题,但我没有找到我正在寻找的答案。在我的游戏中,我有一个玩家一个机器人,这是一场 1v1 的战斗。

我的子弹课:

class Bullet(pygame.sprite.Sprite):

    change_y = 0
    list = pygame.sprite.Group()
    def __init__(self, y):
        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.Surface([6,6])
        self.image.fill(BLACK)
        self.rect = self.image.get_rect()
        self.change_y = y

        Bullet.list.add(self)

    def update(self):

        self.rect.y += self.change_y

我的激活/射击动作:

if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
        if self.player.ammo > 0:
            self.shooting = True
        elif event.type == pygame.KEYUP and event.key == pygame.K_SPACE:
            self.shooting = False

if self.shooting == True:

    self.bullet = Bullet(-45)
    self.bullet.rect.x = self.player.rect.x + 11
    self.bullet.rect.y = self.player.rect.y - 14
    Bullet.list.add(self.bullet)
    for bullet in Bullet.list:
        if self.player.ammo > 0:
             self.player.ammo -= 1

我还是个新手。我尝试了许多不同的方法,一些非常愚蠢的方法。如果你需要,我可以给你更多代码。任何帮助都很棒,要明确的是,我希望我的子弹在两次射击之间有更长的时间,因为到目前为止它每秒可以发射 60 发子弹。另外,当我在这里时,我也可以寻求重新加载的帮助,因为现在我所拥有的只是

if self.player.ammo == 0:
        self.shooting = False
        self.player.ammo = 30

【问题讨论】:

  • 请始终使用 4 空格缩进。否则看你的代码就没意思了。
  • 你应该接受我对 Pygame 标签的编辑。
  • 很抱歉,当我 c/p 时发生了这种情况,实际上我在看到 xD 时就修复了这个问题

标签: python pygame python-2.6


【解决方案1】:

您可以测量两次拍摄之间的时间。

例如:

if self.shooting == True:
  if time.Time() - self.last_shot > self.shot_delay:
    self.bullet = Bullet(-45)
    self.bullet.rect.x = self.player.rect.x + 11
    self.bullet.rect.y = self.player.rect.y - 14
    Bullet.list.add(self.bullet)
    self.last_shot = time.Time()
    for bullet in Bullet.list:
      if self.player.ammo > 0:
      self.player.ammo -= 1

self.shot_delay 是你想要的延迟。

【讨论】:

  • 能否添加更多描述?这段代码什么也没做,只会引发更多的问题和困惑。
  • 它所做的只是测量你最后一次射击之间的时间,self.last_shot 和现在的time.Time(),看看它是否大于延迟,self.shot_delay 你想要在发射子弹之间。 time.Time() 返回秒数。
猜你喜欢
  • 2017-05-22
  • 1970-01-01
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-02
相关资源
最近更新 更多