Farih.co.id
Home Programming Menambahkan Efek Khusus ke Game Pygame: Sistem Partikel dan Peningkatan Visual

Menambahkan Efek Khusus ke Game Pygame: Sistem Partikel dan Peningkatan Visual

game with particles

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:

permainan sederhana dengan objek pemain

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:

pemain bergerak dengan partikel

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:

objek pemain dengan partikel menembak

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:

permainan pygame dengan partikel debu

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.

Comment
Share:

Leave a Reply

Your email address will not be published. Required fields are marked *

Ad