Pengenalan
Mencipta sprite animasi selalunya merupakan langkah penting dalam pembangunan permainan. Artikel ini meneroka dua teknik untuk menjana sprite animasi menggunakan Pygame dan sebilangan kecil fail imej. Dalam konteks permainan, imej ini boleh mewakili letupan atau unsur dinamik lain.
Animasi Bergantung Masa
Dalam animasi bergantung masa, masa berlalu antara setiap bingkai menentukan apabila imej sprite berubah. Langkah berikut menggariskan pelaksanaan:
Dalam gelung permainan:
a. Tambah masa_arus mengikut masa berlalu.
b. Semak sama ada current_time lebih besar daripada atau sama dengan animation_time. Jika ya, tetapkan semula semasa_masa dan indeks kenaikan.
c. Pilih imej sprite yang sesuai berdasarkan indeks dan kemas kini imej sprite.
Animasi Bergantung Bingkai
Dalam animasi bergantung pada bingkai, nombor bingkai antara setiap perubahan imej menentukan apabila imej sprite berubah. Proses pelaksanaan adalah serupa dengan animasi bergantung pada masa, tetapi dengan logik yang sedikit berbeza:
Dalam gelung permainan:
a. Kenaikan rangka_arus.
b. Semak sama ada current_frame lebih besar daripada atau sama dengan animation_frames. Jika ya, tetapkan semula semasa_frame dan indeks kenaikan.
c. Pilih imej sprite yang sesuai berdasarkan indeks dan kemas kini imej sprite.
Memilih Antara Pilihan
Animasi bergantung masa mengekalkan kelajuan animasi yang konsisten tanpa mengira kadar bingkai. Walau bagaimanapun, jika kadar bingkai dan selang animasi tidak sejajar dengan sempurna, penyelewengan visual mungkin berlaku. Sebaliknya, animasi bergantung pada bingkai boleh kelihatan lebih lancar apabila kadar bingkai adalah konsisten tetapi mungkin menjadi terputus-putus semasa ketinggalan. Pilihan antara kedua-duanya bergantung pada keperluan projek dan prestasi yang diingini.
Contoh Pelaksanaan
Contoh kod berikut menunjukkan animasi bergantung pada masa dan bingkai menggunakan 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()
Dengan menukar kaedah update_time_dependent dan update_frame_dependent dalam kaedah kemas kini kelas AnimatedSprite, anda boleh bertukar antara dua teknik animasi.
Atas ialah kandungan terperinci Bagaimanakah anda memilih antara animasi bergantung masa dan bergantung pada bingkai apabila mencipta sprite animasi dalam Pygame?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!