2017-04-19 105 views
0

我已經做了一個簡單的網格和一個簡單的精靈作爲「球員」。Pygame.key.get_pressed - 如何添加間隔?

enter image description here

,我的問題是::但是當我使用箭頭鍵移動,如下圖所示圖片中的人物動作太快如何設置延遲或區間內的各按鍵事件後防止這種問題?

player.py

#!/usr/bin/python 
import os, sys, pygame, random 
from os import path 
from pt import WIDTH,HEIGHT 
from pygame.locals import * 

img_dir = path.join(path.dirname(__file__), 'img') 

class Player(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.sprite.Sprite.__init__(self) 
     self.width = 64 
     self.height = 64 
     self.image = pygame.image.load(path.join(img_dir, "player.png")).convert_alpha() 
     self.image = pygame.transform.scale(self.image,(self.width, self.height)) 
     self.rect = self.image.get_rect() 
     self.speed = 64 
    # self.rect.x = 
    # self.rect.y = 

    def update(self): 
     keys = pygame.key.get_pressed() 

     if keys[pygame.K_LEFT] and self.rect.x > 0: 
      self.rect.x -= self.speed 
     elif keys[pygame.K_RIGHT] and self.rect.x < (WIDTH-self.width): 
      self.rect.x += self.speed 
     elif keys[pygame.K_UP] and self.rect.y > 0: 
      self.rect.y -= self.speed 
     elif keys[pygame.K_DOWN] and self.rect.y < (HEIGHT-self.height): 
      self.rect.y += self.speed 

回答

1

做的就是再次記錄您處理的第一個事件的時間,然後鎮壓事件的處理,直至新的時間至少是某個區間的最簡單的事情大於一審。

某些代碼會說明清楚:

# In your setup set the initial time and interval 
lastTime = 0 
interval = 500 # 500 ms 
# [...] 
while True:  # Main event loop 
    keys = pygame.key.get_pressed() 
    if keys[pygame.K_LEFT] and (getCurrentMillis() > lastTime + interval): 
     lastTime = getCurrentMillis() # Save the new most-recent time 
     print "Handled a keypress!" 

這樣,程序跟蹤使用的關鍵,一旦一定量的時間已經過去了再次只考慮它。

上述代碼不會逐字運行:您需要考慮可用的不同時間源並選擇最適合您的時間源。

你還應該考慮它是如何跟蹤許多不同的最後使用時間的:一個字典(一個defaultdict在這裏可能會有用,以避免大量的鍵的前置添加)和他們最後點擊的時間可能是值得的使用。