pygameの:スプライトアニメーション論 - フィードバックが必要
質問
は、文字画像は、私が一緒にこれを入れている上下左右の入力をその方向に関してに移動してアップさせるため、私は誰かからもらったいくつかのコードのいくつかの調整後:/ <(コードを願っていますあまりにも乱雑ではありません) P>
文字がコード+ IMG を移動
スプライトシートは、長手実行するので、基本的に各スプライト部は異なる作用です。今私は、アニメーションを作るためにセットからサイクルダウンに現在の1「アクション」で機能コードを作ることができる方法はありますでしょうか?
例: 「ファイル名を指定して実行左」は、アニメーションを作るためにループダウン運転アニメーション(4を言うことができます)のか、これまで多くのフレームに可能でしょうそれでは、我々はその列を指定した後、スプライト3のですか?
例画像: のhref="http://animania1.ca/ShowFriends/dev/example.jpg" rel="nofollow noreferrer"> http://animania1.ca/ShowFriends/dev/ example.jpgする
解決
それは簡単なはずです。
あなたは変数にフレーム番号を記録している場合、あなたはアニメーションのフレーム数を表示するために取得する必要がありますフレーム数でこれを法することができます。
frame_count = 0
animation_frames = 4
while quit == False:
# ...
# snip
# ...
area = pygame.Rect(
image_number * 100,
(frame_count % animation_frames) * 150,
100,
150
)
display.blit(sprite, sprite_pos, area)
pygame.display.flip()
frame_count += 1
異なるアクションがフレームの数が異なる場合は、、あなたはimage_numberを更新するときanimation_framesを更新する必要があります。
また、これは、のいずれかののフレームから始まるアニメーションを再生しても大丈夫だということを前提としています。そうでない場合は、アクションが開始したときにフレーム数が何であったかを記録する必要がある、とモジュロ前のフレーム数からこれを奪うよ:
area = pygame.Rect(
image_number * 100,
((frame_count - action_start_frame) % animation_frames) * 150,
100,
150
)
あなたのイベント処理についての注意。あなたは押し続けると、たとえば、左、右をタップしますが、左を押し続ける、スプライトは、あなたが最後に処理イベントは、keyUpイベントだったので、私はまだ残って保持していたという事実にもかかわらず、移動を停止します。
// WWW:これはあなたが望むものでない場合は、、あなたはどちらかのアップ/ダウン、あなたが興味を持っているキーの状態、または<のhref = "HTTPを使用しての記録を維持することによってそれを回避することができます。 pygame.org/docs/ref/key.html#pygame.key.get_pressed」REL = "nofollowをnoreferrer"> pygame.key.get_pressed のインターフェース。
別のノートで、あなたは、固定フレームレートを目指しているように見えると同時に、最後のフレームで撮影した時間に基づいて、あなたのスプライトを移動する方法をはるかに決定します。私の意見では、これはおそらく理想的ではありません。
の2Dアクションゲームは、一般的に予測可能な方法で作業する必要があります。いくつかのCPU重いプロセスがコンピュータにバックグラウンドで起動し、もはや60のフレーム秒を稼ぎ出すことができないためにあなたのゲームを起こした場合、それは減速するために、それはむしろ、あなたのオブジェクトは、フレームの間に大きな距離をスキップし始める必要があり、おそらく望ましいです。これはあなたが弾丸を避けるの周りにジャンプして抱えているメタルスラッグのような2Dアクションゲームで起こった場合を想像?
このはまた、任意の物理計算がはるかに簡単になります。あなたはそれがゲームのどのタイプに基づいて、審判の判定を行う必要があります。