不能发射多枚炮弹



射出一颗子弹有效,但我只能射出一颗,之后它就停止工作了。我试着改变我的";bullet_fire";KEYUP后设置为False,但这也不起作用,因为从那时起,只有在问题仍然存在的情况下,当我按住箭头向上键时,项目符号才可见。我应该如何解决这个问题?这是代码:

import pygame
pygame.init()
# Skärm
Screen = pygame.display.set_mode((1600, 900))
# Title och Logo
pygame.display.set_caption("Fjärt Spel")
icon = pygame.image.load('planet.png')
pygame.display.set_icon(icon)
# backround
backround = pygame.image.load("0000.png")
# player
playerIMG = pygame.image.load("soldier.png")
playerX = 350
playerY = 836
playerX_Change = 0
playerY_Change = 30
# enemy
enemyIMG = pygame.image.load("terrorist2.png")
enemyX = 500
enemyY = 810
enemyX_Change = 0
enemyY_Change = 0
# bullet
bulletIMG = pygame.image.load("pung(32x32).png")
bulletX = playerX
bulletY = playerY
bulletX_Change = 50
bulletY_Change = 0
bullet_fire = False

offScreen = 1600, 900

def player(x, y):
Screen.blit(playerIMG, (x, y))

def enemy(x, y):
Screen.blit(enemyIMG, (x, y))

Running = True
while Running:
Screen.fill((0, 0, 0))
# backround
Screen.blit(backround, (0, 0))
if bullet_fire == True:
Screen.blit(bulletIMG, (bulletX + 100, playerY))
bulletX += bulletX_Change
if bulletX > 1600:
bullet_fire == False

for event in pygame.event.get():
if event.type == pygame.QUIT:
Running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
playerX_Change = -10
if event.key == pygame.K_RIGHT:
playerX_Change = 10
if event.key == pygame.K_SPACE:
playerY_Change = -70
if event.key == pygame.K_UP:
bullet_fire = True

if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT or event.key == pygame.K_SPACE:
playerX_Change = 0
playerY_Change = 30


# Ha player innan fill!!
playerX += playerX_Change
playerY += playerY_Change
if playerX <= 0:
playerX = 0
elif playerX >= 1436:
playerX = 1436
if playerY <= 0:
playerY = 0
elif playerY >= 836:
playerY = 836


player(playerX, playerY)
enemy(enemyX, enemyY)
pygame.display.update()
if bulletX > 1600:
bullet_fire == False
#               ^^

这个看起来想要在到达某个坐标时将bullet_fire设置为False,但实际上,正在比较两者并丢弃结果。这意味着你发射的第一颗子弹仍在继续,已经离开屏幕,现在可能已经到达木星的一半:-(

举个例子,这与以下转录本相似:

>>> a = 7
>>> if a == 7:
...     a == 14
...     print(a)
...
False
7

您需要使用==进行比较,使用=进行分配。


请记住,这可能是您问题的原因。由于您的问题不包含决定是否应该生成新项目符号的代码,因此很难确定。因此,我的假设是,一次只允许一颗子弹(就像在很多街机游戏中一样(。因此,如果你从不";销毁";现在的子弹,你再也无法发射另一颗了。

如果结果是而不是,那么您可能需要发布更多的代码,以便我们进行详尽的分析。


顺便说一句,我有点担心中涉及的物理问题

Screen.blit(bulletIMG, (bulletX + 100, playerY))

这似乎是在玩家当前的Y位置绘制子弹,这意味着,在子弹发射后,它将以某种奇怪的爱因斯坦";远处的诡异动作";方式虽然这让游戏变得容易多了,因为你可以在射击后指挥子弹,但我不相信它会在现实主义类别中获得高分:-(

最新更新