Python 在游戏中射击

Python 在游戏中射击,python,pygame,Python,Pygame,我目前的项目是用python制作空间入侵者。我正在使用pygame库来帮助我这样做。到目前为止,除了玩家开火外,一切正常。当玩家按下左控制键时,玩家应该发射一颗子弹,相反,玩家将继续发射,直到被告知执行其他动作,如移动。如果有人能帮我解决这个问题,我们将不胜感激,代码如下,谢谢 def update(self): self.speed_x = 0 keystate = pygame.key.get_pressed() if keystate[pygame.K_LE

我目前的项目是用python制作空间入侵者。我正在使用pygame库来帮助我这样做。到目前为止,除了玩家开火外,一切正常。当玩家按下左控制键时,玩家应该发射一颗子弹,相反,玩家将继续发射,直到被告知执行其他动作,如移动。如果有人能帮我解决这个问题,我们将不胜感激,代码如下,谢谢

    def update(self):
    self.speed_x = 0
    keystate = pygame.key.get_pressed()
    if keystate[pygame.K_LEFT]:
        self.speed_x = -10
    if keystate[pygame.K_RIGHT]:
        self.speed_x = 10
    self.rect.x += self.speed_x
    if self.rect.right > DISPLAY_WIDTH:
        self.rect.right = DISPLAY_WIDTH
    if self.rect.left < 0:
        self.rect.left = 0
    if keystate[pygame.K_LCTRL]:
        player.shoot()
def更新(自):
自速度_x=0
keystate=pygame.key.get_pressed()
如果keystate[pygame.K_左]:
self.speed_x=-10
如果keystate[pygame.K_RIGHT]:
自速度_x=10
self.rect.x+=self.speed\u x
如果self.rect.right>显示宽度:
self.rect.right=显示宽度
如果self.rect.left<0:
self.rect.left=0
如果键状态[pygame.K_LCTRL]:
player.shoot()

您遇到了问题,因为您使用了
pygame.key.get_pressed()
,这会一直显示
True
,直到您释放
K_LCTRL

您可以使用
fired=True/False
控制是否发射了第一颗子弹

def __init__(self):
    self.fired = False

def update(self):
    if keystate[pygame.K_LCTRL]:
        if not self.fired:
            player.shoot()
            self.fired = True
    else:
        self.fired = False

或者使用
event.type==pygame.KEYDOWN
而不是
pygame.key.get_pressed()
,因为
event
只创建一次-当按钮状态从
未按下
更改为
按下
时。(相同的
键控
仅创建一次-当按钮状态从
按下
更改为
未按下时

并在主循环中执行它

for event in pygame.event.get():
    your_object.handle_event(event)

你应该发布
shot
的定义。这是因为你使用了
pygame.key.get_pressed()
,这会一直给出
True
,直到你释放
K\u LCTRL
。您可以使用
fired=True/False
控制是否发射了第一颗子弹。或者使用
event.type==pygame.KEYDOWN
而不是
pygame.key.get_pressed()
,因为
event
只创建一次-当按钮状态从未按下变为按下时。
for event in pygame.event.get():
    your_object.handle_event(event)