2017-05-02 18 views
0

PyGameを使用して、矢印のキーボードプレスによって制御されたグリッド内を動く移動する正方形を作成したいと思います。したがって、「上」キーを押すと正方形がセルに直接上向きに移動し、「右」キーを押すとセルが右に直接移動します。キーボード入力によるPyGameフレームレート

私のループでは、私はpygame.time.wait(x)を使用して一時停止しますxミリ秒。ただし、xの正しい値を選択することは困難です。 xが大きすぎると(1000など)、正方形がすぐに反応せず、実際に移動するにはキーを押し続けなければなりません。しかし、xが小さすぎると(例えば10)、キーを押すたびに正方形が複数回連続して移動します。しかし、私は正方形がすべてのキーを押すごとに一度動くようにしたい。これどうやってするの?ありがとう!

以下は私のコードの重要な部分である:

x = 100 
    current_pos = [0, 0] 

    while True: 

     pygame.event.pump() # process event queue 
     is_key_pressed = pygame.key.get_pressed() 

     if is_key_pressed[pygame.K_UP]: 
      current_pos[1] -= 1 

     elif is_key_pressed[pygame.K_RIGHT]: 
      current_pos[0] += 1 

     elif is_key_pressed[pygame.K_DOWN]: 
      current_pos[1] += 1 

     elif is_key_pressed[pygame.K_LEFT]: 
      current_pos[0] -= 1 

     show_map(current_pos) 

     pygame.time.wait(x) 

答えて

2

の代わりに(それが開催されたかいないか)キーの状態、それが押されたかrealesedだときにチェックをチェックします。これは、前の状態のキーを保存し、その状態が変化したかどうかをチェックするか、イベントループを使用して行うことができます。

使用してキーの状態:

was_pressed = pygame.key.get_pressed() 

while True: 
    pygame.event.pump() # process event queue 
    key_is_pressed = pygame.key.get_pressed() 

    if key_is_pressed[pygame.K_UP] and not was_pressed[pygame.K_UP]: 
     current_pos[1] -= 1 

    elif key_is_pressed[pygame.K_RIGHT] and not was_pressed[pygame.K_RIGHT]: 
     current_pos[0] += 1 

    elif key_is_pressed[pygame.K_DOWN] and not was_pressed[pygame.K_DOWN]: 
     current_pos[1] += 1 

    elif key_is_pressed[pygame.K_LEFT] and not was_pressed[pygame.K_LEFT]: 
     current_pos[0] -= 1 

    was_pressed = key_is_pressed 

イベントループを使用する:

while True: 
    for event in pygame.event.get(): 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_UP: 
       current_pos[1] -= 1 
      elif event.key == pygame.K_UP: 
       current_pos[0] += 1 
      elif event.key == pygame.K_DOWN: 
       current_pos[1] += 1 
      elif event.key == pygame.K_LEFT: 
       current_pos[0] -= 1 
関連する問題