2015-10-23 24 views
0

因此,我正在製作一個自上而下的射擊遊戲,左鍵單擊射擊,右鍵單擊重新裝入槍。我想這樣做是因爲玩家不能在重新加載時進行拍攝,並且我不希望屏幕上顯示玩家有完整的彈藥,直到他們完全重新加載後(就像任何fps遊戲一樣)。有誰知道我可以如何實現這一點?感謝您的任何反饋:)如何在pygame中爲玩家的武器製作重載計時器?

這裏是我的鼠標/燒製代碼:

if event.type == pygame.MOUSEBUTTONDOWN and pygame.mouse.get_pressed() == (1, 0, 0) and ammo > 0: 
    ammo -= 1 
    bullet = Bullet() 
    all_sprites_list.add(bullet) 
    bullet_list.add(bullet) 
elif event.type == pygame.MOUSEBUTTONDOWN and pygame.mouse.get_pressed() == (0, 0, 1): 
    pygame.time.wait(1000) 
    ammo = full_ammo 

所以我知道pygame.time.wait(1000)凍結整個程序完整的第二,我有它在那裏想這會推遲設置ammo = full_ammo但它暫停了整個遊戲哈哈。有沒有人知道一個函數或pygame.什麼函數,我可以用來延遲彈藥設置(模擬重新加載時間)?

回答

2

您想要添加一個變量,以跟蹤您是否正在重新加載當前以及上次重新加載的時間。這會看起來有點像這樣:

elif event.type == pygame.MOUSEBUTTONDOWN and pygame.mouse.get_pressed() == (0, 0, 1): 
    lastReloadTime = time.clock() 
    reloading = True 
    ammo = full_ammo 

(請記住,你需要import time

然後,你需要更新您的拍攝代碼添加一個條件,看看你目前是否重裝。

if not reloading and event.type == pygame.MOUSEBUTTONDOWN and pygame.mouse.get_pressed() == (1, 0, 0) and ammo > 0: 
    ammo -= 1 
    bullet = Bullet() 
    all_sprites_list.add(bullet) 
    bullet_list.add(bullet) 

最後,你需要添加一些代碼,看看你是否完成重裝。這應該在您的事件處理之外。

if reloading and time.clock() - lastReloadTime > TIME_TO_RELOAD: #1000 
    reloading = False 

我強烈建議把1000到變量(命名爲TIME_TO_RELOAD或任何你想要的),這將使它更容易微調和調整遊戲的常量。

+0

謝謝,這個作品完美!有一點需要注意,我不得不使用time.clock()而不是'time.now()',因爲clock()會在幾秒鐘內計算出程序運行的時間,而now()會給我時間的一天。所以現在我想讓屏幕在完成重新加載後顯示完整的彈藥剪輯,而不是在重新加載時發生。你有什麼想法可以做到這一點?編輯:只是在開玩笑,我想通了:)感謝您的幫助 – Tanman1276

+0

我對上述代碼中的縮進道歉,在我的程序中格式正確,但是當我複製/粘貼它時,我忘記格式正確,抱歉!它現在已經修復:) – Tanman1276

+0

@ Tanman1276好吧很酷,很高興聽到!此外,要讓彈夾剪輯顯示爲完整,您只需在'reloading = False'行後添加任何代碼即可。 – DJMcMayhem