あなたは、pygameのからイベントを取得し、代わりに、現在押され、あなたの鍵を与える(get_pressed()
によって返されたキーを見ていると、KEYDOWN
イベントに気を付けることができますそのフレーム)。
あなたのコードでは、ゲームが30fpsでレンダリングされ、左矢印キーを0.5秒間押し続けると、その場所を15回更新しています。ゲームループの強制最大フレームレートにのみ、あなたがすることができますカウンタによってベース
events = pygame.event.get()
for event in events:
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
location -= 1
if event.key == pygame.K_RIGHT:
location += 1
キーが押されている間に連続的な動きをサポートするために、あなたが何らかの制限を確立しなければならない、どちらかループの多くのティックを動かす。 、これが唯一のあなたは、あなたが移動した場合ので、ティッカーが10に設定されます(一回ごとに10枚のフレームを移動させます
if move_ticker > 0:
move_ticker -= 1
:
move_ticker = 0
keys=pygame.key.get_pressed()
if keys[K_LEFT]:
if move_ticker == 0:
move_ticker = 10
location -= 1
if location == -1:
location = 0
if keys[K_RIGHT]:
if move_ticker == 0:
move_ticker = 10
location+=1
if location == 5:
location = 4
は次にどこかゲームループ中に、あなたはこのような何かをするだろう10フレーム後に再び移動できるようになります)
出典
2013-04-16 18:24:09
Haz
私はこれを使用しようとしましたが、pygameがそのイベントを探していた瞬間にボタンを押しただけで問題になりました。私はそれが欲しい時には動かないだろう。 –
ゲームループの各アップデートであなたのイベントを調べる必要があります。これをしていたのですか?あなたがそれらを読んだり、汲み取ったりするまで、イベントはPygameのイベントキューに残ります。 – Haz
ダン、この回答はまさにあなたが求めていたものですが、イベントを使用すると速度をコントロールできればあなたが望むかもしれないあなたの船を連続的に移動することはできません。あなたは元のコードを保持することができ、一度押されたキーを検出すると、Nループの押されたボタンを簡単に無視することができます。 – pmoleri