pygameで小さなプログラムを書いた後、問題が発生しました。プログラムは、分割された .GIF アニメーションを取得し、次の方法で画像 (gif のフレーム) を読み込みます。
pygame.image.load(filename)
これは、配列に追加される pygame surface オブジェクトを返します。プログラムは、合計6 つの配列を使用して、約15 フレームを配列にロードします。
私が抱えている問題は、while ループを介して入力を受け入れるときです。ループはアイドル アニメーションと実行中のアニメーションを正常に再生しますが、キーボードからの入力を受け入れると (pygame のイベント リストから入力を取得します...)
for event in pygame.event.get():
経由pygame.KEYDOWN
非常に顕著なラグがあり、応答しないアニメーション セットの切り替えが発生します。この方法でゲームを作る場合は、修正する必要があります。私のコードは非効率的だと思いますが、一時停止を作成しないだけで十分です。どんな助けでも素晴らしいでしょう。
私の推測?pygame.clock.tick()
ある種のイベントラグを作成していますが、イベントラグが発生した場合でも、これを修正する方法がわかりません。
問題があると思われるループは次のとおりです。
while running == 2:
pygame.display.flip()
#mouse = pygame.mouse.get_pos()
#events = pygame.event.get()
#(pygame.QUIT, pygame.KEYDOWN, pygame.KEYUP)
for event in pygame.event.get():
#event = pygame.event.wait()
if event.type == pygame.QUIT:
sys.exit(0)
elif event.type == pygame.KEYDOWN:
print event.key
wait = 0
if event.key == pygame.K_d:
tmpcache = wr
lastkey = "wr"
elif event.key == pygame.K_a:
tmpcache = wl
lastkey = "wl"
elif event.type == pygame.KEYUP:
wait = 1
if lastkey == "wr":
tmpcache = sr
elif lastkey == "wl":
tmpcache = sl
if wait == 1:
for frame in tmpcache:
screen.blit(test, (0,0))
screen.blit(frame, (currentchar.posx, currentchar.posy))
pygame.display.flip()
clock.tick(charfps)
else:
for frame in tmpcache:
screen.blit(test, (0,0))
screen.blit(frame, (currentchar.posx, currentchar.posy))
pygame.display.flip()
clock.tick(charfps)
ここには示されていませんが、いくつかの変数が使用されています。
charfps = 30
currentchar.posx, currentchar.posy
両方のタプルが(300, 240)