Menambahkan Efek Khusus ke Game Pygame: Sistem Partikel dan Peningkatan Visual
Table of content:
Pygame adalah library populer untuk mengembangkan game menggunakan Python. Saat membuat game, menambahkan efek khusus dapat sangat meningkatkan daya tarik visual dan pengalaman pemain secara keseluruhan.
Sistem partikel adalah teknik yang ampuh untuk menciptakan efek yang dinamis dan menarik secara visual seperti awan debu, ledakan, kabut, dan banyak lagi.
Buat Game Sederhana
Sebelum mendalami sistem partikel dan peningkatan visual, mulailah dengan membuat game sederhana menggunakan Pygame. Buat file baru bernama simple-game.py dan mulai dengan mengimpor pustaka yang diperlukan dan menginisialisasi Pygame. Siapkan jendela permainan dengan lebar dan tinggi yang ditentukan.
Kode yang digunakan dalam artikel ini tersedia di sini repositori GitHub dan gratis untuk Anda gunakan di bawah lisensi MIT.
Di dalam lingkaran permainan utama, tangani peristiwa pengguna dan perbarui posisi pemain berdasarkan penekanan tombol. Gambar persegi panjang untuk menggunakan objek pemain pygame.draw.rect().
Terakhir, perbarui jendela game menggunakan pygame.display.flip() dan keluar dari game saat pemain keluar dari loop. Game sederhana ini akan menjadi dasar untuk menambahkan efek khusus menggunakan sistem partikel.
Anda akan melihat kotak putih yang mewakili pemain yang dapat Anda gerakkan ke kiri dan ke kanan:
Membuat Berbagai Jenis Partikel
Sekarang setelah Anda menyiapkan gim sederhana, Anda dapat menambahkan sistem partikel yang berbeda. Buat kelas partikel untuk setiap efek dan kelas sistem partikel untuk mengelola dan memperbarui partikel.
Efek Partikel Saat Pemain Bergerak
Efek partikel pertama akan berupa jejak partikel debu yang dipancarkan dari punggung pemain saat pemain mulai bergerak menggunakan input mouse atau keyboard. Selain itu, arah partikel debu akan berubah saat pemain mengubah arah.
Tentukan a Partikel kelas yang mewakili partikel individu. Setiap partikel memiliki posisi awal (X Dan y), kecepatan acak (dx Dan dy), dan masa hidup yang menentukan berapa lama partikel itu akan ada.
Juga, tentukan a Sistem Partikel kelas yang mengelola kumpulan partikel. Anda dapat menambahkan partikel baru ke sistem menggunakan tambahkan_partikel() metode. Itu memperbarui() metode memperbarui semua partikel dalam sistem dan menghapus partikel yang telah mencapai akhir masa pakainya.
class Particle:
def __init__(self, x, y):
self.x = x
self.y = y
self.dx = random.uniform(-1, 1)
self.dy = random.uniform(-1, 1)
self.lifetime = 60 def update(self):
self.x += self.dx
self.y += self.dy
self.lifetime -= 1
def draw(self, window):
color = (200, 200, 200)
position = (int(self.x), int(self.y))
pygame.draw.circle(window, color, position, 2)
class ParticleSystem:
def __init__(self):
self.particles = []
def add_particle(self, x, y):
self.particles.append(Particle(x, y))
def update(self):
for particle in self.particles:
particle.update()
if particle.lifetime <= 0:
self.particles.remove(particle)
def draw(self, window):
for particle in self.particles:
particle.draw(window)
Untuk mengintegrasikan sistem partikel ke dalam game Anda, Anda perlu membuat beberapa modifikasi pada loop game utama. Buat file baru bernama gerakan-partikel.py dan tambahkan kode dengan pembaruan di bawah ini:
particle_system = ParticleSystem()
running = True
clock = pygame.time.Clock()
while running:
dt = clock.tick(60) / 1000.0
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
particle_y = player_y + player_height // 2
particle_x = player_x + player_width
keys = pygame.key.get_pressed()
boundary = player_x < window_width - player_width
if keys[pygame.K_LEFT] and player_x > 0:
player_x -= 5
particle_system.add_particle(particle_x, particle_y)
if keys[pygame.K_RIGHT] and boundary:
player_x += 5
particle_system.add_particle(player_x, particle_y)
particle_system.update()
window.fill(BLACK)
player_pos = (player_x, player_y, player_width, player_height)
pygame.draw.rect(window, WHITE, player_pos)
particle_system.draw(window)
pygame.display.flip()
pygame.quit()
Saat Anda memindahkan objek pemutar sekarang, Anda akan melihat partikel yang menekankan gerakan:
Efek Ledakan
Efek partikel selanjutnya adalah efek ledakan yang terjadi saat pemain menembakkan peluru. Efek ledakan akan terdiri dari partikel berwarna merah yang dipancarkan dari posisi peluru.
Tentukan a Partikel kelas mirip dengan yang sebelumnya, tapi kali ini termasuk a warna parameter untuk mewakili warna partikel.
Juga, perbarui Sistem Partikel kelas untuk menangani jenis partikel baru. Itu tambahkan_partikel() metode sekarang mengambil tambahan warna parameter dan membuat partikel dengan warna yang ditentukan.
class Particle:
def __init__(self, x, y, color):
self.x = x
self.y = y
self.dx = random.uniform(-2, 2)
self.dy = random.uniform(-2, 2)
self.lifetime = 30
self.color = color def update(self):
self.x += self.dx
self.y += self.dy
self.lifetime -= 1
def draw(self, window):
position = (int(self.x), int(self.y))
pygame.draw.circle(window, self.color, position, 3)
class ParticleSystem:
def __init__(self):
self.particles = []
def add_particle(self, x, y, color):
self.particles.append(Particle(x, y,color)
def update(self):
for particle in self.particles:
particle.update()
if particle.lifetime <= 0:
self.particles.remove(particle)
def draw(self, window):
for particle in self.particles:
particle.draw(window)
Untuk mengintegrasikan efek ledakan ke dalam game Anda, Anda perlu melakukan beberapa modifikasi pada loop game utama. Buat nama file baru shoot-particle.py dan tambahkan kode dengan pembaruan di bawah ini:
particle_system = ParticleSystem()
running = True
clock = pygame.time.Clock()
while running:
dt = clock.tick(60) / 1000.0
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
boundary = player_x < window_width - player_width
if keys[pygame.K_LEFT] and player_x > 0:
player_x -= 5
if keys[pygame.K_RIGHT] and boundary:
player_x += 5
if keys[pygame.K_SPACE]:
bullet_x = player_x + player_width // 2
bullet_y = player_y
particle_system.add_particle(bullet_x, bullet_y, RED)
particle_system.update()
window.fill(BLACK)
player_pos = (player_x, player_y, player_width, player_height)
pygame.draw.rect(window, WHITE, player_pos)
particle_system.draw(window)
pygame.display.flip()
pygame.quit()
Inilah hasilnya:
Ketika bilah spasi ( pygame.K_SPACE) ditekan, tambahkan partikel ke sistem partikel pada posisi peluru. Ini menciptakan efek ledakan dengan partikel merah.
Efek Debu
Peningkatan visual terakhir yang dapat Anda terapkan adalah efek latar belakang yang berdebu. Efek debu akan terdiri dari partikel abu-abu kecil yang bergerak dalam pola melingkar, menciptakan latar belakang yang dinamis dan berdebu.
Perbarui Partikel kelas untuk memasukkan an sudut Dan kecepatan untuk setiap partikel. Sudut menentukan arah gerakan, dan kecepatan mengontrol seberapa cepat partikel bergerak dalam pola melingkar. Modifikasi memperbarui() metode untuk memperbarui posisi setiap partikel berdasarkan sudut dan kecepatannya.
Juga, perbarui Sistem Partikel kelas untuk menangani perilaku partikel baru. Partikel sekarang bergerak dalam pola melingkar di dalam jendela permainan.
class Particle:
def __init__(self, x, y, radius):
self.x = x
self.y = y
self.radius = radius
self.angle = random.uniform(0, 2 * math.pi)
self.speed = random.uniform(0.5, 1.5) def update(self):
self.angle += 0.02
self.x += math.cos(self.angle) * self.speed
self.y += math.sin(self.angle) * self.speed
if self.x < 0:
self.x = window_width
elif self.x > window_width:
self.x = 0
if self.y < 0:
self.y = window_height
elif self.y > window_height:
self.y = 0
def draw(self, window):
color = (128, 128, 128)
pos = (int(self.x), int(self.y))
radius = int(self.radius)
pygame.draw.circle(window, color, pos, radius)
class ParticleSystem:
def __init__(self):
self.particles = []
def add_particle(self, x, y, radius):
self.particles.append(Particle(x, y, radius))
def update(self):
for particle in self.particles:
particle.update()
def draw(self, window):
for particle in self.particles:
particle.draw(window)
Untuk mengintegrasikan efek debu ke dalam game Anda, Anda perlu melakukan beberapa modifikasi pada loop game utama. Buat file baru bernama partikel-debu.py dan tambahkan kode dengan pembaruan di bawah ini:
particle_system = ParticleSystem()
running = True
clock = pygame.time.Clock()
while running:
dt = clock.tick(60) / 1000.0
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
particle_x = random.randint(0, window_width)
particle_y = random.randint(0, window_height)
particle_system.add_particle(particle_x, particle_y, 1)
particle_system.update()
window.fill((0, 0, 0))
particle_system.draw(window)
pygame.display.flip()
pygame.quit()
Tambahkan partikel secara acak di jendela permainan menggunakan acak.randint() fungsi. Setiap partikel memiliki jari-jari awal 1. Perbarui dan gambar sistem partikel di jendela permainan, menciptakan efek latar belakang yang dinamis dan berdebu.
Anda akan melihat banyak partikel di layar, bergerak secara acak namun lancar:
Praktik Terbaik untuk Efek Khusus
Saat menambahkan efek khusus ke game Pygame Anda, pertimbangkan praktik terbaik berikut:
Optimalisasi Kinerja
Sistem partikel dapat melibatkan sejumlah besar partikel, yang dapat memengaruhi performa game. Terapkan teknik seperti partisi spasial (misalnya, Quadtree) untuk mengoptimalkan pembaruan dan gambar partikel.
Daur Ulang Partikel
Alih-alih membuat dan menghancurkan partikel di setiap bingkai, pertimbangkan untuk menggunakan kembali partikel dengan mengatur ulang propertinya saat mencapai akhir masa pakainya. Ini membantu meminimalkan alokasi memori dan deallocation.
Pengumpulan Partikel
Pertahankan kumpulan partikel yang telah dialokasikan sebelumnya untuk menghindari biaya tambahan dalam membuat instance baru selama runtime. Ini dapat meningkatkan kinerja dan mengurangi fragmentasi memori.
Batasi Jumlah Partikel
Untuk mencegah sistem partikel membanjiri layar game, tetapkan batas jumlah maksimum partikel dan singkirkan partikel saat mencapai batas ini. Ini memastikan bahwa efeknya tetap menarik secara visual tanpa mengganggu permainan.
Konsistensi Visual
Pertahankan gaya visual yang konsisten sepanjang permainan Anda, termasuk efek partikel. Pastikan bahwa warna, ukuran, dan pola pergerakan partikel koheren dengan keseluruhan tema dan gaya seni.
Efek suara
Tambahkan efek suara untuk melengkapi efek partikel Anda. Misalnya, putar suara ledakan saat efek ledakan terjadi atau suara sekitar saat efek kabut atau debu aktif.
Jadikan Game Lebih Menyenangkan Dengan Efek Khusus
Menambahkan efek khusus, seperti sistem partikel, ke game Pygame Anda dapat sangat meningkatkan pengalaman pemain dan membuat game Anda lebih menarik dan menyenangkan bagi para pemain. Dengan menerapkan efek partikel seperti jejak, ledakan, kabut, dan debu, Anda dapat menciptakan lingkungan yang dinamis dan memukau secara visual.
Ingatlah untuk mempertimbangkan pengoptimalan kinerja, daur ulang partikel, dan konsistensi visual sambil memasukkan efek khusus ke dalam game Anda. Dengan kreativitas dan eksperimen, Anda dapat membawa game Pygame Anda ke level selanjutnya dan memikat pemain dengan pengalaman yang imersif dan mengasyikkan.