2009-04-10 5 views
3

いくつかのコードを微調整した後、私は文字画像をその方向に移動させ、左下の入力を上下に動かすようにしました。したがって、基本的に各スプライト部は異なる作用で、スプライトシートのみ長手実行)Pygame:スプライトアニメーション理論 - フィードバックが必要

Character Move Code + IMG

あまりに厄介ではありません。今、アニメーションを作るために、セットの 'アクション'からサイクルダウンするために現在のものと一緒に機能するコードを作る方法がありますか?

たとえば、 'Run Left'はスプライト3です。そこで、その列を指定すると、アニメーションを作成するために、実行アニメーションのフレーム数(4と言うことができます)をループすることは可能ですか?

例画像: alt text http://animania1.ca/ShowFriends/dev/example.jpghttp://animania1.ca/ShowFriends/dev/example.jpg

+0

この質問は非常に混乱しています。テキストを読んでクリアして、あなたが望むものを理解するようにしてください。 –

答えて

4

それは簡単なはずです。

変数にフレーム番号を記録する場合は、表示するアニメーションフレーム番号を取得する必要があるフレーム数でモジュロすることができます。

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 
    ) 

ノートをあなたのイベント処理について。左を言いながら右にタップしても左に押し続けると、あなたが処理した最後のイベントは、まだ左を保っているにもかかわらず、キーアップイベントだったので、スプライトは動きません。

これが必要でない場合は、興味のあるキーのアップ/ダウン状態を記録するか、またはpygame.key.get_pressedインターフェイスを使用して回避することができます。

また、固定フレームレートを目指すと同時に、最後のフレームにかかる時間に基づいてスプライトを移動する距離を決定するように見えます。私の意見では、これはおそらく理想的ではありません。

2Dアクションゲームは、一般的に予測可能な方法で動作する必要があります。 CPUの重いプロセスがコンピュータのバックグラウンドで起動し、1秒間に60フレームのフレームを書き出すことができなくなった場合、オブジェクトがフレーム間の巨大な距離をスキップし始めるのではなく、遅くする方がよいでしょう。これが、メタルスラッグのような2Dアクションゲームで起こった場合、弾丸を避けて飛び回らなければならないことを想像してみてください。

これにより、物理計算もずっと簡単になります。あなたはそれがどんなゲームのタイプに基づいて判断を下す必要があります。

+0

あなたのご意見をありがとうございます。私はあなたがパフォーマンスなどについて言ったことすべてに同意します。私は無料のコードやアドバイスを参考にしてこれらのことをすべて学んでいます。私が必要とするもののためにはるかに機能するものを学ぶために、私に指示できるものはありますか? – RamonLion

+0

残念ながら、本当に良いチュートリアルは見つかりませんでした。私は適切と思われるものを読むことをお勧めしますが、人々がインターネット上で仕事を発表しただけで、必ずしも専門家ではありません。主なものは、何かを稼働させることです。後でそれをクリーンアップすることができます。 – SpoonMeiser

+0

とてもそうです。だから私は古いものを取り出してpygame.key.get_pressedを追加するために何を変えなければならないだろうか。また、どのようにフレームレートを可変に設定するのですか? – RamonLion

関連する問題