1

pygame でキー入力に基づいてスプライトを移動したい場合、キーを押したままにすると、キーを離すまでスプライトがその方向に移動し続けるコードを書く方法はありますか? 私はこれを試しましたが、プログラムがクラッシュするか、キーを繰り返しタップしてスプライトを意図した方向に移動する必要があります。

4

3 に答える 3

5

OP は、イベントではなくキーステート ポーリングを必要としKEYDOWNます。

この例では、キー イベントとキー ポーリングの両方を使用しています。1 つは「キーを押したとき」に使用し、もう 1 つは「押したまま」に使用します。

import pygame
from pygame.locals import *

done = False    
player.pos = Rect(0,0,10,10)

while not done:
    for event in pygame.event.get():
        # any other key event input
        if event.type == QUIT:
            done = True        
        elif event.type == KEYDOWN:
            if event.key == K_ESC:
                done = True

    # get key current state
    keys = pygame.key.get_pressed()
    if keys[K_LEFT]:
        player.pos.left -= 10
    if keys[K_RIGHT]:
        player.pos.left += 10
    if keys[K_UP]:
        player.pos.top -= 10
    if keys[K_DOWN]:
        player.pos.left += 10
    if keys[K_SPACE]: 
        print 'firing gun'
于 2012-11-03T08:45:47.623 に答える
0

通常、 update メソッドで次のような移動関数を使用します。

this.pos_x = direction * speed * delta

ここで、KEYDOWN イベントで方向を 1 または -1 に設定し、KEYUP で方向を 0 に戻します。こうすることで、一定の動きが得られます。

于 2012-11-03T15:06:29.810 に答える
0

概要として、

  • KEYDOWNpygame メッセージ キューでイベントをリッスンします。
  • 興味のあるキーが押されているかどうかを確認します。
  • その方向に移動
  • KEYUPキーに一致するイベントのメッセージ キューを確認します。
  • 移動を停止します。

これを実装する方法については、ドキュメントを参照してください。

于 2012-11-03T04:18:30.460 に答える