2017-02-01 26 views
-1

我目前的項目是在python中製作太空入侵者。我正在使用pygame庫來幫助我這樣做。到目前爲止,除了玩家射擊之外,一切正常。當玩家按下左側控制時,玩家應該發射一顆子彈,相反,玩家將繼續射擊,直到被告知要做其他動作。如果有人可以幫助我解決這個問題,我們將非常感謝,代碼如下,謝謝。直到你釋放K_LCTRL -在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() 
+1

你應該張貼shoot'的'定義執行它。 –

+0

這是因爲你使用'pygame.key.get_pressed()',它總是給出'True',直到你釋放'K_LCTRL'。如果你發射了第一個子彈,你可以使用'fired = True/False'來控制。或者使用'event.type == pygame.KEYDOWN'而不是'pygame.key.get_pressed()',因爲'event'只創建一次 - 當按鈕狀態從未按下被按下時。 – furas

回答

1

因爲你用pygame.key.get_pressed()這給True所有的時間你有問題。

您可以使用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僅創建一次 - 當從not-pressed按鈕改變狀態pressed。 (同KEYUP僅創建一次 - 當從pressed按鈕改變狀態not-pressed

def handle_event(self, event): 
    if event.type == pygame.KEYDOWN: 
     if pygame.key == pygame.K_LCTRL: 
      player.shoot() 

並在主循環

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