1

pygameでは、関数「pressed_key」を使用しています

これは私のコードです:

if(pressed_keys[K_y]):
    base += 10;

でも1回だけ押すと「ベース」が200くらい増えました。2 つのエントリ間の時間を増やす方法があるかどうか知りたいですか?

助けてくれてありがとう!

(psこの質問で同様の質問を検索する方法が本当にわかりません。これが重複していないことを願っています。ただし、重複している場合はお知らせください。この質問を削除します。ありがとうございます!)

4

3 に答える 3

2

ここ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

もう1つの方法は、「キーを押す」ことを受け入れた時間を取得し、それを再び受け入れる前に待つことです。

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年です。

それを知っていると、あなたはそれを最後に保存した時間に対して今時間を取っています:今-最後の時間。
このデルタが間隔よりも大きい場合、イベントを続行できます。lasttime変数を更新することを忘れないでください。

于 2012-08-14T16:55:18.917 に答える
1

clockを使用するために pygame について十分に理解していることを願っています。

(簡単にするために、必要な時間間隔は 1 秒とします)

簡単な解決策は、単純なカウンターと pygame クロックを使用して、毎秒入力のみをチェックすることです。

最初に、メイン ループの外でクロックとカウンターを開始します。また、ブール変数を追加して、キーがこの秒内に押されたかどうかを判断します。

FRAMERATE = 30 #(The framerate used in this example is 30 FPS)
clock = pygame.time.Clock()
counter = 0
not_pressed = True

次に、メインループ内で最初に行うことは、カウンターを増やしてから、クロックを刻むことです。

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を毎秒 True に戻すチェッカーを追加します。

if counter == FRAMERATE:
    counter=0
    not_pressed=True

これにより、プログラムは 1 秒に 1 回だけユーザーからの入力を取得できるようになります。間隔を変更するには、単にif counter == FRAMERATE:行を変更します。

  • if counter == FRAMERATE:1秒になります
  • if counter == (FRAMERATE*2):2秒になります
  • if counter == int(FRAMERATE/4):1/4 秒になります*

*注-除算を囲むか、整数除算を使用してFRAMERATE、数値で除算したものを整数に変換してください。int()(FRAMERATE//4)

すべてがどのように適合するかを確認するための同様の例については、この回答を参照してください。

于 2012-08-15T13:38:17.773 に答える
0

関連項目: Pygame: key.get_pressed() がイベント キューと一致しないキーを押している間、繰り返し移動するには。これらのキーに対して状態ポーリングを使用すると、より適切に機能します。

于 2012-08-17T20:01:40.983 に答える