Как мне исправить мой код пули, чтобы, когда я выпускаю вторую пулю с другого направления, это не меняло направления первой пули?

#python #pygame

#python #pygame

Вопрос:

У меня проблема, когда я выпускаю одну пулю в определенном направлении, затем я выпускаю вторую пулю в другом направлении, предыдущая пуля тоже меняет направление.

 if bullet.x < 1919 and bullet.x > 0 and facing==-1 or bullet.x < 1919 and bullet.x > 0 and facing==1 :#boundry for bullets made small change
    bullet.x  = bullet.vel
elif bullet.y < 803 and bullet.y> 0 and facing==2:#boundry for bullets made small change needs added to  main stage
    bullet.y -= bullet.vel    
elif bullet.y < 803 and bullet.y > 0 and facing==-2 :#needs added to main stage
    bullet.y -= bullet.vel 
else:
    bullets.pop(bullets.index(bullet))

keys = pygame.key.get_pressed()
movemana=25#the cost when using that move need ot make function for  that later

if keys[pygame.K_SPACE] and mana>movemana and shootloop==0:
    #print(mana)
    mana-=movemana
    #print(mana)
    if man.up==True:
        facing=2
    if man.left==True:
        facing = -1
    if man.right==True:
        facing = 1
    if man.down==True:
        facing=-2
    print(facing)
    if len(bullets) < 5:
        bullets.append(projectile(round(man.x   man.width //2), round(man.y   man.height//2), 6, (0,0,0), facing))
    shootloop=1#cooldownrate
  

Комментарии:

1. Не делай if x == True просто делай if x

Ответ №1:

Похоже, что присутствует только часть вашего кода, но я сделаю все возможное с тем, что доступно.

Похоже, что все ваши маркеры используют одну и ту же глобальную facing переменную. facing устанавливается в нижней части вашего кода. Тогда, я полагаю, верхняя часть вызывается для каждой пули, что означает, что все они будут использовать одно и то же facing значение (независимо от того, какое оно было установлено при создании последней пули).

Однако, похоже, что вы также сохраняете эту facing переменную внутри каждого создаваемого маркера; смотрите строку внизу, которая начинается с bullets.append(projectile(... этого значения, просто не используется в настоящее время. Поэтому при проверке местоположения маркера в верхней половине попробуйте использовать bullet.facing (или как там называется этот элемент) вместо просто facing .