Я заметил странную вещь во всех моих играх, где мой игрок прекращает стрелять, если я двигаюсь, будь то, что игрок уже стреляет, когда я двигаюсь, или игрок уже движется, когда я пытаюсь стрелять, если я двигаюсь Стрельба прекращается. Вот код, который я использовал для перемещения игрока в одной из последних игр, которые я сделал:
def move(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_d]:
self.x += self.speed
if keys[pygame.K_a]:
self.x -= self.speed
И для стрельбы я делаю это:
def handle_events():
if event.type == pygame.MOUSEBUTTONDOWN:
game.bullets.append(Bullet())
Любая помощь будет принята с благодарностью. Также примечание: если кто-то знает о чем-то в коде в целом, что может вызвать это (поскольку это происходит во всех моих играх), размещает комментарий, чтобы я мог обновить вопрос с помощью соответствующего кода, так как сейчас я понятия не имею, что может быть причиной это.
Редактировать: Недавно я заметил, что игрок все еще может стрелять, когда его притягивает сила тяжести (которая технически все еще движется). Поэтому я предполагаю, что что-то происходит, когда я нажимаю клавиши (любую клавишу, а не только те, которые я включил в код), что делает игрока неспособным стрелять.
Моя handle_evnets()
функция буквально только обрабатывает закрытие игра и нажатие кнопки мыши. Вот код в любом случае:
def handle_events():
for event in events:
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
game.bullets.append(Bullet())
Вот класс пули, который добавляется к game.bullets
, если MOUSEBUTTONDOWN
class Bullet:
def __init__(self):
self.pos = [(player.x - 10 - scroll[0]), (player.y + 15 - scroll[1])]
self.height = 3
self.width = 20
self.bullet = pygame.Surface((self.width, self.height)).convert_alpha()
self.bullet.fill((255, 255, 255))
self.dir = [(mouse.x - (player.x - 10 - scroll[0])), (mouse.y - (player.y + 15 - scroll[1]))]
self.distance = math.hypot(self.dir[0], self.dir[1])
self.dir = [(self.dir[0]/ self.distance), (self.dir[1]/ self.distance)]
angle = math.degrees(math.atan2((-self.dir[1]), self.dir[0]))
self.bullet = pygame.transform.rotate(self.bullet, (angle))
self.speed = 10
Вот класс Game и что происходит с маркером после его добавления к этому классу, который является shoot_bullet()
функцией.
class Game:
def __init__(self):
self.bullets = []
def shoot_bullet(self):
for bullet in self.bullets:
bullet.pos[0] += bullet.dir[0] * bullet.speed
bullet.pos[1] += bullet.dir[1] * bullet.speed
D.blit(bullet.bullet, (bullet.pos[0], bullet.pos[1]))