Perpustakaan Arcade Python telah Anda liput, mulai dari animasi berbasis warna yang paling sederhana hingga pemodelan partikel yang rumit.

Animasi memainkan peran penting dalam meningkatkan daya tarik visual dan keterlibatan video game. Pustaka Arcade adalah kerangka kerja Python untuk membuat game 2D. Ini menawarkan cara yang mudah dan efektif untuk memasukkan animasi ke dalam proyek game Anda.

Anda dapat menggunakan perpustakaan Arcade untuk membuat animasi gerakan dasar dan menyinkronkan animasi dengan acara game.

Buat Game Sederhana

Sebelum memulai, pastikan Anda sudah pip diinstal pada perangkat Anda. Gunakan perintah ini untuk menginstal perpustakaan arcade:

pip menginstal arcade

Setelah itu, buat file Python bernama simple-game.py dan mulailah dengan menyiapkan permainan di mana pemain dapat bergerak ke kiri dan ke kanan.

Kode yang digunakan dalam artikel ini tersedia di sini repositori GitHub dan gratis untuk Anda gunakan di bawah lisensi MIT.

Menggunakan perpustakaan Arcade, Anda dapat membuat jendela, mengatur lingkungan game, dan menangani input pemain. Berikut cuplikan kode untuk memulai:

impor arcade

SCREEN_WIDTH = 800
LAYAR_TINGGI = 600

kelasMyGame(arcade. Jendela):
def__init__(diri sendiri):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Permainanku")
self.player_x = SCREEN_WIDTH // 2
self.player_y = SCREEN_HEIGHT // 2

defon_draw(diri sendiri):
arcade.start_render()
col = arcade.warna. BIRU
arcade.draw_circle_filled (self.player_x, self.player_y, 20, kol)

defon_key_press(mandiri, kunci, pengubah):
jika kunci == arcade.kunci. KIRI:
self.player_x -= 10
elif kunci == arcade.kunci. BENAR:
self.player_x += 10

defutama():
game = Permainanku()
arcade.lari()

jika __nama__ == "__utama__":
utama()

Tambahkan Animasi Gerakan Dasar

Sekarang, bawa game Anda selangkah lebih maju dan tambahkan animasi gerakan dasar ke objek pemain. Untuk menghidupkan pemain pada gerakan, buat 3 lingkaran berbeda dan ulangi di antaranya secara berurutan saat pemain mulai bergerak. Berikut cuplikan kode yang diperbarui untuk gerakan-animasi.py mengajukan:

kelasMyGame(arcade. Jendela):
def__init__(diri sendiri):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Permainanku")
self.player_x = SCREEN_WIDTH // 2
self.player_y = SCREEN_HEIGHT // 2
self.frame_counter = 0

defon_draw(diri sendiri):
arcade.start_render()
col1 = arcade.color. BIRU
col2 = arcade.color. HIJAU
col3 = arcade.color. MERAH

jika self.frame_counter < 10:
arcade.draw_circle_filled (self.player_x, self.player_y, 20, col1 )
elif self.frame_counter < 20:
arcade.draw_circle_filled (self.player_x, self.player_y, 20, col2 )
kalau tidak:
arcade.draw_circle_filled (self.player_x, self.player_y, 20, col3)

defon_key_press(mandiri, kunci, pengubah):
jika kunci == arcade.kunci. KIRI:
self.player_x -= 10
self.frame_counter = (self.frame_counter + 1) % 30
elif kunci == arcade.kunci. BENAR:
self.player_x += 10
self.frame_counter = (self.frame_counter + 1) % 30

Berikut adalah contoh bingkai keluaran:

Mengontrol Kecepatan dan Arah Animasi

Untuk mengontrol kecepatan animasi, Anda dapat memperkenalkan sistem frame rate. Anda juga dapat mengubah urutan frame tergantung pada arah pergerakan pemain. Saat pemain bergerak dari kiri ke kanan, bingkai akan ditampilkan dalam urutan terbalik.

Berikut cuplikan kode yang dimodifikasi untuk frame-rate.py mengajukan:

kelasMyGame(arcade. Jendela):
def__init__(diri sendiri):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Permainanku")
self.player_x = SCREEN_WIDTH // 2
self.player_y = SCREEN_HEIGHT // 2
self.frame_counter = 0
col1 = arcade.color. BIRU
col2 = arcade.color. HIJAU
col3 = arcade.color. MERAH
self.frames = [col1, col2, col3]
self.frame_rate = 10

defon_draw(diri sendiri):
arcade.start_render()
frame_index = self.frame_counter // self.frame_rate % len (self.frames)

jika self.player_x < SCREEN_WIDTH // 2:
frame_index = len (self.frames) - 1 - bingkai_indeks

indeks = self.frames[frame_index]
arcade.draw_circle_filled (self.player_x, self.player_y, 20, indeks)

defon_key_press(mandiri, kunci, pengubah):
jika kunci == arcade.kunci. KIRI:
self.player_x -= 10
self.frame_counter += 1
elif kunci == arcade.kunci. BENAR:
self.player_x += 10
self.frame_counter += 1

Gunakan operator modulus % dengan len (self.frames) untuk memastikan bahwa frame_index selalu berada dalam kisaran frame yang tersedia. Ini mencegah IndexError dari yang terjadi ketika animasi loop melalui frame.

Sesuaikan frame_rate nilai untuk mengontrol kecepatan animasi, dan menikmati gerakan animasi objek game Anda.

Termasuk Fitur Tambahan

Perpustakaan Arcade menyediakan berbagai fitur untuk menyempurnakan animasi Anda.

Efek Partikel

Anda dapat membuat efek partikel, seperti ledakan atau asap, untuk menambah realisme pada game Anda. Buat file bernama partikel.py dan tambahkan kode di bawah ini untuk implementasi sistem partikel sederhana menggunakan Python dan perpustakaan arcade:

impor arcade
impor acak

# Dimensi layar
SCREEN_WIDTH = 800
LAYAR_TINGGI = 600

# Warna
PUTIH = (255, 255, 255)

# Kelas partikel
kelasPartikel:
def__init__(self, x, y, dx, dy, radius, warna, umur):
diri.x = x
diri.y = y
self.dx = dx
self.dy = dy
self.radius = radius
self.color = warna
self.lifespan = umur

defmemperbarui(diri sendiri):
self.x += self.dx
self.y += self.dy
diri.masa hidup -= 1

defmenggambar(diri sendiri):
arcade.draw_circle_filled (self.x, self.y, self.radius, self.color)

# Kelas permainan
kelasMyGame(arcade. Jendela):
def__init__(diri, lebar, tinggi):
super().__init__(lebar, tinggi, "Contoh Partikel")
self.particles = []

defmempersiapkan(diri sendiri):
# Buat partikel
untuk _ di dalam jangkauan(100):
x = acak.rangkaian (SCREEN_WIDTH)
y = acak.rangkaian (SCREEN_HEIGHT)
dx = acak.seragam(-1, 1)
dy = acak.seragam(-1, 1)
radius = acak.seragam(2, 5)
warna = arcade.warna. PUTIH
umur = acak.randint(60, 120)
partikel = Partikel (x, y, dx, dy, jari-jari, warna, umur)
self.particles.append (partikel)

defon_draw(diri sendiri):
arcade.start_render()
untuk partikel di dalam partikel diri:
partikel.draw()

defmemperbarui(mandiri, waktu_delta):
untuk partikel di dalam partikel diri:
partikel.update()

jika partikel.masa hidup <= 0:
self.particles.remove (partikel)

defutama():
game = Permainan Saya (SCREEN_WIDTH, SCREEN_HEIGHT)
game.setup()
arcade.lari()

jika __nama__ == "__utama__":
utama()

Anda akan melihat animasi yang melibatkan banyak partikel bergerak:

Animasi Interaktif

Terapkan animasi interaktif yang merespons input pengguna atau peristiwa game. Misalnya, saat pemain berinteraksi dengan suatu objek, objek tersebut dapat bergerak, berubah warna, atau berubah dalam beberapa cara. Animasi interaktif ini memberikan umpan balik dan meningkatkan interaksi pemain dengan game. Berikut kode untuk interactive-animation.py mengajukan:

impor arcade

# Dimensi layar
SCREEN_WIDTH = 800
LAYAR_TINGGI = 600

# Warna
PUTIH = (255, 255, 255)
MERAH = (255, 0, 0)

kelasMyGame(arcade. Jendela):
def__init__(diri, lebar, tinggi):
super().__init__(lebar, tinggi, "Animasi Interaktif")
self.player_x = 400
self.player_y = 300
self.player_radius = 30
self.player_color = MERAH
self.animation_radius = 60
self.animation_color = PUTIH
self.animation_active = PALSU

defon_draw(diri sendiri):
arcade.start_render()

arcade.draw_circle_filled (self.player_x,
diri.pemain_y,
diri.radius_pemain,
self.player_color)

jika self.animation_active:
arcade.draw_circle_filled (self.player_x,
diri.pemain_y,
diri.animasi_radius,
self.animation_color)

defon_mouse_press(diri, x, y, tombol, pengubah):
jika (self.player_x - self.player_radius <=
x <= self.player_x + self.player_radius Dan
self.player_y - self.player_radius <=
y <= self.player_y + self.player_radius
):
self.animation_active = BENAR

defmemperbarui(mandiri, waktu_delta):
jika self.animation_active:
self.animation_radius += 1

jika self.animation_radius > 100:
self.animation_active = PALSU
self.animation_radius = 0

defutama():
game = Permainan Saya (SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.lari()

jika __nama__ == "__utama__":
utama()

Ganti metode yang diperlukan, seperti on_draw, on_mouse_press, Dan memperbarui, untuk menangani menggambar pemain dan animasi, menangani klik mouse, dan memperbarui animasi.

Untuk menggambar pemain, gunakan arcade.draw_circle_filled fungsi, yang mengambil (x, y) koordinat pusat, jari-jari, dan warna sebagai argumen. Fungsi draw_circle_filled adalah salah satunya Alat arcade yang dapat Anda gunakan untuk menggambar aset game. Dalam hal ini, Anda dapat menggambar lingkaran yang tumbuh dengan memvariasikan radius dari waktu ke waktu.

Itu on_mouse_press metode berjalan ketika pengguna mengklik mouse. Ini memeriksa apakah koordinat mouse berada dalam batas objek pemain dan mengaktifkan animasi jika ada.

Praktik Terbaik untuk Menambahkan Animasi

Saat menambahkan animasi ke game Anda, pertimbangkan praktik terbaik berikut:

Batasi Jumlah Animasi

Memiliki banyak animasi dengan banyak bingkai dapat memengaruhi performa. Pertimbangkan untuk meminimalkan jumlah animasi atau bingkai yang diperlukan, terutama untuk elemen yang tidak penting dalam game. Menyederhanakan animasi dapat membantu menjaga frekuensi gambar yang konsisten dan mengoptimalkan penggunaan sumber daya.

Batch Render Objek Serupa

Kelompokkan objek serupa yang berbagi bingkai animasi dan tekstur yang sama bersama-sama dan render sebagai kumpulan. Batching mengurangi jumlah panggilan undian, menghasilkan peningkatan kinerja. Teknik ini sangat berguna saat menganimasikan objek yang menggunakan sprite sheet yang sama atau memiliki urutan animasi yang serupa.

Gunakan Interpolasi untuk Animasi Halus

Terapkan teknik interpolasi, seperti interpolasi linier (lerping), untuk mencapai transisi animasi yang mulus. Interpolasi menghitung nilai antara antara keyframe animasi untuk membuat gerakan yang lancar. Pendekatan ini mencegah lompatan tiba-tiba atau gerakan tersentak-sentak di antara bingkai, menghasilkan animasi yang lebih menarik secara visual.

Pertimbangkan Kecepatan dan Pengaturan Waktu Animasi

Bereksperimenlah dengan berbagai kecepatan dan waktu animasi untuk menemukan keseimbangan yang tepat untuk game Anda. Sesuaikan durasi frame atau gunakan urutan animasi yang berbeda untuk membuat variasi kecepatan, akselerasi, atau deselerasi. Penyesuaian ini dapat menambah kedalaman dan karakter pada animasi game Anda.

Uji dan Optimalkan

Uji animasi Anda secara teratur pada perangkat yang berbeda dan pantau kinerjanya. Cari potensi kemacetan atau pelambatan dan optimalkan sesuai kebutuhan. Proses ini membantu memastikan pengalaman animasi yang mulus dan konsisten di berbagai perangkat.

Jadikan Game Lebih Menarik Dengan Animasi

Menambahkan animasi ke game Anda dapat meningkatkan interaksi dan imersi pemain secara signifikan. Animasi memberikan umpan balik visual untuk tindakan pemain, membuat gameplay lebih intuitif dan menyenangkan. Mereka menghidupkan dunia game, menciptakan rasa realisme dan kegembiraan.

Baik itu karakter yang berlari, ledakan objek, atau efek transisi sederhana, animasi berkontribusi pada pengalaman bermain game yang lebih dinamis dan menawan.