在pygame的,我使用的功能「pressed_key」如何每秒只獲得一次密鑰輸入? (或延遲兩個鍵盤輸入之間的時間)
這是我的代碼:
if(pressed_keys[K_y]):
base += 10;
但是當我按它只有一次做到這一點, 「基數」上漲了200點。我想知道是否有辦法增加兩次錄入之間的時間?
感謝您的幫助!
(PS我真的不知道如何尋找類似的問題在這個問題上,我再次希望這不是複製的。但如果是這樣,讓我知道,我會刪除這個問題。謝謝!)
在pygame的,我使用的功能「pressed_key」如何每秒只獲得一次密鑰輸入? (或延遲兩個鍵盤輸入之間的時間)
這是我的代碼:
if(pressed_keys[K_y]):
base += 10;
但是當我按它只有一次做到這一點, 「基數」上漲了200點。我想知道是否有辦法增加兩次錄入之間的時間?
感謝您的幫助!
(PS我真的不知道如何尋找類似的問題在這個問題上,我再次希望這不是複製的。但如果是這樣,讓我知道,我會刪除這個問題。謝謝!)
我希望您對pygame有足夠的瞭解,以便使用clock。
(爲簡單起見,我們會說會是一秒所需的時間間隔)
一個簡單的解決辦法是隻檢查輸入的每一秒,使用一個簡單的計數器和pygame的時鐘。
首先關閉你的主循環以外的時鐘和計數器,。 另外,添加一個布爾變量來確定在這秒鐘內是否按下了鍵。
FRAMERATE = 30 #(The framerate used in this example is 30 FPS)
clock = pygame.time.Clock()
counter = 0
not_pressed = True
然後在主循環中,你要做的第一件事是增加計數器,然後tick the clock。
while argument:
counter+=1
clock.tick(FRAMERATE)
然後是你有你的代碼,if
聲明,看看是否按鈕被按下第二個:
if not_pressed:
if(pressed_keys[K_y]):
not_pressed=False
base += 10
#Rest of code:
if(pressed_keys[K_up]):
最後,在你的主循環的末尾,添加一個檢查切換布爾not_pressed
回真正的每秒:
if counter == FRAMERATE:
counter=0
not_pressed=True
這應該允許該程序只需要從用戶每秒一次輸入。 要更改間隔,只需更改if counter == FRAMERATE:
一行。
if counter == FRAMERATE:
會在1秒鐘if counter == (FRAMERATE*2):
將是2秒if counter == int(FRAMERATE/4):
將是第二個**四分之一注意 - 請確保您打開FRAMERATE
由許多分,變成一個整數,要麼使用周圍的分區使用int()
,要麼使用整數除法:(FRAMERATE//4)
有關類似示例以瞭解所有內容如何適用,請參閱this answer。
這裏http://www.pygame.org/docs/ref/key.html#pygame.key.set_repeat
pygame.key.set_repeat(delay, interval): return None
也:
pygame.key.get_pressed()[K_y]: return bool
另一種方式再次接受之前,讓你接受了「按鍵」的時間,並等待:
import time
interval = 100 #you set your interval in miliseconds
lasttime = 0
while 1:
draw() #draw routine
events() #another events
now = time.time() #save in one variable if you are going to test against more than one, reducing the number of time.time() calls
if(pressed_keys[K_y] and (now-lasttime)>interval):
lasttime = now
base += 10
time.time()返回自紀元以來的時間,以秒爲單位的浮點數。這個時代是時間開始的地方。當年的1月1日,0時,「時代以來的時間」爲零。對於Unix,這個時代是1970年。
知道,你現在正在獲取時間與上一次保存時間: now-lasttime。
當此增量大於間隔時間時,您可以繼續活動,不要忘記更新您的上次變量。
好吧,現在的問題其實更加複雜。現在我需要上,下,左,右鍵重複禁用,但只有「y」鍵才能夠重複功能。這是可能的,bcz y就像接受購買的東西,但其他鍵是移動。非常感謝! – windsound 2012-08-15 13:37:38
使用列表中的鍵使其成爲「for」:「用於[K_UP,K_LEFT,K_DOWN,K_RIGHT]中的鍵:如果pressed pressed keys [key]:#code」,則還可以包含具有回調的另一個列表(key_list,func_list):如果pressed pressed keys [key]:func()#call相應的函數「,funclist是[func_up,func_left ...] with是」 def func_up():#code「 在Python文檔中搜索」zip「語法。 – 2012-08-15 15:21:05
另請參閱:Pygame: key.get_pressed() does not coincide with the event queue在按住鍵的情況下使用重複移動。對這些鍵使用狀態輪詢效果更好。
好吧,現在的問題其實更加複雜。現在我需要上,下,左,右鍵重複禁用,但只有「y」鍵才能夠重複功能。這是可能的,bcz y就像接受購買的東西,但其他鍵是移動。非常感謝! – windsound 2012-08-15 13:47:55
@windsound只要你有'if'語句來處理'if not_pressed'外的其他鍵,它們會在你按下它們時作出反應。如果你喜歡,你可以把'not_pressed'改成'y_not_pressed'。 – hammythepig 2012-08-15 13:56:03
@hammythebig有道理,但現在的問題是我的其他鍵不工作。我現在不能移動我的角色。你有其他的方式來聊天,我想更多地瞭解clock.tick功能。非常感謝! – windsound 2012-08-15 16:02:57