2013-12-10 69 views
0

基本上,目前,在我的遊戲中,用戶可以按照他們的意願多次射擊......這會挫敗遊戲的目標(這太容易了),因爲他們可以垃圾郵件子彈。我有一個'商店'類型的功能,使用戶購買升級,因此垃圾郵件打敗了商店的目的。如何防止pygame中的按鈕垃圾郵件

elif event.key == K_SPACE: 
        newBullet = {'rect': pygame.Rect(bulletX, bulletY, 10, 3), 'surface': bullet} 
        pistolSound.play() 
        bullets.append(newBullet) 

這是代碼,我可以添加它以防止按鈕混搭垃圾郵件。我對pygame時間函數很不滿意,但我有一種可以使用的感覺。

此外,我想我的殭屍在它是相當隨機的時刻一致,而不是產卵...

timer = clock.tick() 
    if waveNumber <= 2: 
       timer += 1 
       if timer == 2: 
        newZombie = {'rect':pygame.Rect(zombieX, zombieY, 75, 75), 'surface': zombie} 
        zombieSound.play() 
        zombies.append(newZombie) 
        timer = 0 

我將如何去這樣做呢?我想我使用的時間功能錯了。

非常感謝,威爾。

+3

請考慮爲無關的查詢打開單獨的問題 – RedBaron

+0

好的,謝謝,不要經常使用它。 – user2233480

+0

如果你想要一把槍每0.3秒射擊一次,無論他們按多少(甚至按下按鈕),你都可以使用冷卻時間。 http://stackoverflow.com/a/18856389/341744 – ninMonkey

回答

1

限制子彈的一些少數的數量:

elif event.key == K_SPACE: 
    if len(bullets) < 3: 
     newBullet = {'rect': pygame.Rect(bulletX, bulletY, 10, 3), 'surface': bullet} 
     pistolSound.play() 
     bullets.append(newBullet) 
+0

感謝您編輯jonrshape。不知何故,我在想Java,而不是Python。這就是一次編寫多種語言時會發生的情況:-( –

+0

沒關係,我看到了你的意思,幸運的是我知道相當多的Java,但這並不是我想要的,但它確實實現了我想要和我可以操縱價值取決於什麼升級已經買了。謝謝。 – user2233480

+2

另一種可能性是當你生成子彈時保存當前的時間,然後拒絕生成更多的子彈一段時間後 –

0

你應該改掉你的模擬和事件處理成簡單的「圈」,讓玩家只拍攝一個子彈每回合(甚至更少) 。

離您最近的代碼示例將設置一個「發射按鈕按下這個回合」標誌時,相應類型的事件被處理,那麼之後所有的事件都被處理拍攝最多一次:

#each event 
if event.key == K_SPACE: 
    playerShooting=True 

...

#each turn 
if playerShooting: 
    newBullet = {'rect': pygame.Rect(bulletX, bulletY, 10, 3), 'surface': bullet}    
    pistolSound.play() 
    bullets.append(newBullet) 
playerShooting=False#clear to prepare for next turn 

殭屍有一個類似的問題:你不能預測clock.tick()的值。相反,每回合最多產生一次殭屍(可能按計劃進行,例如每五圈)。時鐘應該用於決定主循環是否應該繼續進行遊戲狀態更新,而不是等待進一步的輸入,並決定何時渲染幀。

作爲參考,PyGame主循環的bad examplegood but incomplete example

+0

我將如何去把殭屍產卵的時間表? – user2233480

+0

一個選項是http://stackoverflow.com/a/18954902/341744 – ninMonkey