Pygame でアニメーション スプライトを作成する場合、時間依存アニメーションとフレーム依存アニメーションのどちらをどのように選択しますか?

Patricia Arquette
リリース: 2024-11-09 05:04:02
オリジナル
730 人が閲覧しました

How do you choose between time-dependent and frame-dependent animation when creating animated sprites in Pygame?

少数の画像からアニメーション スプライトを作成する

はじめに

アニメーション スプライトの作成は、多くの場合、ゲーム開発において重要なステップです。この記事では、Pygame と少数の画像ファイルを使用してアニメーション スプライトを生成する 2 つの手法について説明します。ゲームのコンテキストでは、これらの画像は爆発やその他の動的要素を表す可能性があります。

時間依存アニメーション

時間依存アニメーションでは、次の時間から次の時間までの時間が経過します。各フレームは、スプライトの画像がいつ変更されるかを決定します。次の手順で実装の概要を説明します。

  1. すべてのスプライト イメージをリストに読み込みます。
  2. 変数のindex、current_time、animation_timeを作成します。 Index は現在のスプライト画像を追跡し、current_time は最後の画像変更からの時間を記録し、animation_time は画像変更間の時間間隔を指定します。
  3. ゲーム ループ内:

    a。 current_time を経過時間だけ増分します。

    b. current_time が anime_time 以上であるかどうかを確認します。その場合、current_time をリセットし、インデックスをインクリメントします。

    c.インデックスに基づいて適切なスプライト画像を選択し、スプライトの画像を更新します。

フレーム依存アニメーション

フレーム依存アニメーションでは、番号各画像変更間のフレーム数によって、スプライトの画像がいつ変更されるかが決まります。実装プロセスは時間依存アニメーションと似ていますが、ロジックが少し異なります。

  1. 変数のインデックス、current_frame、animation_frames を作成します。 Index は現在のスプライト画像を追跡し、current_frame は最後の画像変更以降のフレーム数を記録し、animation_frames は画像変更間のフレーム数を指定します。
  2. ゲーム ループ内:

    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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート