はじめに
アニメーション スプライトの作成は、多くの場合、ゲーム開発において重要なステップです。この記事では、Pygame と少数の画像ファイルを使用してアニメーション スプライトを生成する 2 つの手法について説明します。ゲームのコンテキストでは、これらの画像は爆発やその他の動的要素を表す可能性があります。
時間依存アニメーション
時間依存アニメーションでは、次の時間から次の時間までの時間が経過します。各フレームは、スプライトの画像がいつ変更されるかを決定します。次の手順で実装の概要を説明します。
ゲーム ループ内:
a。 current_time を経過時間だけ増分します。
b. current_time が anime_time 以上であるかどうかを確認します。その場合、current_time をリセットし、インデックスをインクリメントします。
c.インデックスに基づいて適切なスプライト画像を選択し、スプライトの画像を更新します。
フレーム依存アニメーション
フレーム依存アニメーションでは、番号各画像変更間のフレーム数によって、スプライトの画像がいつ変更されるかが決まります。実装プロセスは時間依存アニメーションと似ていますが、ロジックが少し異なります。
ゲーム ループ内:
a. current_frame をインクリメントします。
b. current_frame がanimation_frames 以上であるかどうかを確認します。その場合、current_frame をリセットし、インデックスをインクリメントします。
c.インデックスに基づいて適切なスプライト イメージを選択し、スプライトのイメージを更新します。
オプションの選択
時間依存のアニメーションにより、一貫したアニメーション速度が維持されます。フレームレートに関係なく。ただし、フレームレートとアニメーション間隔が完全に一致していないと、視覚的に不規則な表示が発生する可能性があります。一方、フレーム依存アニメーションは、フレーム レートが一定であればより滑らかに見えますが、ラグが発生するとバラバラになる可能性があります。この 2 つのどちらを選択するかは、プロジェクトの要件と必要なパフォーマンスによって異なります。
実装例
次のコード例は、Pygame を使用した時間依存アニメーションとフレーム依存アニメーションの両方を示しています。
import pygame import os # Load sprite images images = [] for file_name in os.listdir('images'): image = pygame.image.load(os.path.join('images', file_name)).convert() images.append(image) # Create a sprite class with time-dependent and frame-dependent update methods class AnimatedSprite(pygame.sprite.Sprite): def __init__(self, position, images): super().__init__() self.rect = pygame.Rect(position, images[0].get_size()) self.images = images self.index = 0 self.image = images[0] self.velocity = pygame.math.Vector2(0, 0) self.animation_time = 0.1 self.current_time = 0 self.animation_frames = 6 self.current_frame = 0 def update_time_dependent(self, dt): self.current_time += dt if self.current_time >= self.animation_time: self.current_time = 0 self.index = (self.index + 1) % len(self.images) self.image = self.images[self.index] def update_frame_dependent(self): self.current_frame += 1 if self.current_frame >= self.animation_frames: self.current_frame = 0 self.index = (self.index + 1) % len(self.images) self.image = self.images[self.index] # Create a sprite and update it in the game loop player = AnimatedSprite((100, 100), images) all_sprites = pygame.sprite.Group(player) running = True while running: dt = pygame.time.Clock().tick(FPS) / 1000 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False all_sprites.update(dt) screen.fill((0, 0, 0)) all_sprites.draw(screen) pygame.display.update()
AnimatedSprite クラスの update メソッドの update_time_dependent メソッドと update_frame_dependent メソッドを入れ替えることで、2 つのアニメーション技術を切り替えることができます。
以上がPygame でアニメーション スプライトを作成する場合、時間依存アニメーションとフレーム依存アニメーションのどちらをどのように選択しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。