Animasyonlu parçacıklarla en basit oyunları canlandırabilirsiniz. Bu teknikleri kullanarak hareketi, patlamaları ve daha fazlasını simüle edin.

Pygame, Python kullanarak oyun geliştirmek için popüler bir kütüphanedir. Oyunlar oluştururken özel efektler eklemek, oyuncular için görsel çekiciliği ve genel deneyimi büyük ölçüde artırabilir.

Parçacık sistemleri, toz bulutları, patlamalar, sis ve daha fazlası gibi dinamik ve görsel olarak ilgi çekici efektler yaratmak için güçlü bir tekniktir.

Basit Bir Oyun Yaratın

Parçacık sistemlerine ve görsel geliştirmelere dalmadan önce, Pygame kullanarak basit bir oyun oluşturarak başlayın. adlı yeni bir dosya oluşturun. basit oyun.py ve gerekli kitaplıkları içe aktararak ve Pygame'i başlatarak başlayın. Oyun penceresini belirli bir genişlik ve yükseklikte ayarlayın.

Bu makalede kullanılan kod bu makalede mevcuttur. GitHub deposu ve MIT lisansı altında ücretsiz olarak kullanabilirsiniz.

Ana oyun döngüsünün içinde, kullanıcı olaylarını yönetin ve tuşlara basarak oyuncunun konumunu güncelleyin.

instagram viewer
bir dikdörtgen çiz kullanarak oyuncu nesnesi için pygame.draw.rect().

Son olarak, kullanarak oyun penceresini güncelleyin. pygame.display.flip() ve oyuncu döngüden çıktığında oyundan çıkın. Bu basit oyun, parçacık sistemlerini kullanarak özel efektler eklemek için temel görevi görecek.

Sağa ve sola hareket ettirebileceğiniz oyuncuyu temsil eden beyaz bir kare görmelisiniz:

Çeşitli Parçacık Türleri Oluşturma

Artık basit oyun kurulumunuzu yaptığınıza göre, farklı parçacık sistemleri ekleyebilirsiniz. Her efekt için parçacık sınıfları ve parçacıkları yönetmek ve güncellemek için bir parçacık sistemi sınıfı oluşturun.

Oyuncu Hareket Halindeyken Parçacık Etkisi

İlk parçacık efekti, oyuncu hareket etmeye başladığında oyuncunun sırtından yayılan toz parçacıklarının izi olacaktır. fare veya klavye girişini kullanarak hareket ettirin. Ek olarak, oyuncu yön değiştirdiğinde toz parçacıklarının yönü de değişecektir.

tanımla parçacık tek bir parçacığı temsil eden sınıf. Her parçacığın bir başlangıç ​​konumu vardır (X Ve y), rastgele bir hız (dx Ve öl) ve parçacığın ne kadar süre var olacağını belirleyen bir ömür.

Ayrıca, bir tanımla Parçacık sistemi parçacık koleksiyonunu yöneten sınıf. kullanarak sisteme yeni bir parçacık ekleyebilirsiniz. add_particle() yöntem. bu güncelleme() yöntem, sistemdeki tüm parçacıkları günceller ve ömrünün sonuna gelmiş parçacıkları kaldırır.

# Parçacık sınıfı
sınıfparçacık:
kesinlikle__içinde__(öz, x, y):
self.x = x
self.y = y
self.dx = rastgele.üniform(-1, 1)
self.dy = rastgele.uniform(-1, 1)
self.lifetime = 60

kesinliklegüncelleme(kendi):
self.x += self.dx
self.y += self.dy
self.lifetime -= 1

kesinlikleçizmek(öz, pencere):
renk = (200, 200, 200)
pozisyon = (int (self.x), int (self.y))
pygame.draw.circle (pencere, renk, konum, 2)

# Parçacık sistemi sınıfı
sınıfParçacık sistemi:
kesinlikle__içinde__(kendi):
öz.parçacıklar = []

kesinlikleadd_particle(öz, x, y):
self.particles.append (Parçacık (x, y))

kesinliklegüncelleme(kendi):
için parçacık içinde öz parçacıklar:
parçacık.güncelleme()

eğer partikül.lifetime <= 0:
self.particles.remove (parçacık)

kesinlikleçizmek(öz, pencere):
için parçacık içinde öz parçacıklar:
partikül.çizim (pencere)

Parçacık sistemini oyununuza entegre etmek için ana oyun döngüsünde birkaç değişiklik yapmanız gerekiyor. adlı yeni bir dosya oluşturun. hareket-parçacıkları.py ve aşağıdaki güncellemelerle kodu ekleyin:

# Parçacık sistemi oluştur
partikül_sistemi = ParticleSystem()

# Ana oyun döngüsü
koşu = Doğru
saat = pygame.time. Saat()

sırasında koşma:
dt = saat.tik(60) / 1000.0

için etkinlik içinde pygame.event.get():
eğer event.type == pygame. ÇIKIŞ YAPMAK:
koşu = YANLIŞ

partikül_y = player_y + player_height // 2
parçacık_x = oyuncu_x + oyuncu_genişliği

tuşlar = pygame.key.get_pressed()
sınır = player_x < window_width - player_width

eğer anahtarlar[pygame. K_LEFT] Ve oyuncu_x > 0:
oyuncu_x -= 5
partikül_sistemi.add_particle (partikül_x, partikül_y)

eğer anahtarlar[pygame. K_RIGHT] Ve sınır:
player_x += 5
partikül_sistemi.add_particle (oyuncu_x, partikül_y)

partikül_sistemi.update()

pencere.dolgu (SİYAH)
player_pos = (player_x, player_y, player_width, player_height)
pygame.draw.rect (pencere, BEYAZ, player_pos)
partikül_sistemi.draw (pencere)

pygame.display.flip()

# Oyundan çık
pygame.quit()

Oyuncu nesnesini şimdi hareket ettirdiğinizde, hareketi vurgulayan parçacıklar görmelisiniz:

Patlama Etkisi

Bir sonraki parçacık efekti, oyuncu bir kurşun sıktığında ortaya çıkan bir patlama efekti olacaktır. Patlama efekti, merminin konumundan yayılan kırmızı renkli parçacıklardan oluşacaktır.

tanımla parçacık öncekine benzer bir sınıf, ancak bu sefer bir renk Parçacığın rengini temsil eden parametre.

Ayrıca, güncelleyin Parçacık sistemi yeni parçacık tipini işlemek için sınıf. bu add_particle() yöntem şimdi ek alır renk parametresini kullanır ve belirtilen renkte parçacıklar oluşturur.

# Parçacık sınıfı
sınıfparçacık:
kesinlikle__içinde__(öz, x, y, renk):
self.x = x
self.y = y
self.dx = rastgele.üniform(-2, 2)
self.dy = rastgele.uniform(-2, 2)
self.lifetime = 30
öz.renk = renk

kesinliklegüncelleme(kendi):
self.x += self.dx
self.y += self.dy
self.lifetime -= 1

kesinlikleçizmek(öz, pencere):
pozisyon = (int (self.x), int (self.y))
pygame.draw.circle (pencere, self.color, konum, 3)

# Parçacık sistemi sınıfı
sınıfParçacık sistemi:
kesinlikle__içinde__(kendi):
öz.parçacıklar = []

kesinlikleadd_particle(öz, x, y, renk):
self.particles.append (Particle (x, y, color)

kesinliklegüncelleme(kendi):
için parçacık içinde öz parçacıklar:
parçacık.güncelleme()

eğer partikül.lifetime <= 0:
self.particles.remove (parçacık)

kesinlikleçizmek(öz, pencere):
için parçacık içinde öz parçacıklar:
partikül.çizim (pencere)

Patlama efektini oyununuza entegre etmek için ana oyun döngüsünde birkaç değişiklik yapmanız gerekir. Yeni bir dosya adı oluştur ateş-parçacık.py ve aşağıdaki güncellemelerle kodu ekleyin:

# Parçacık sistemi oluştur
partikül_sistemi = ParticleSystem()

# Ana oyun döngüsü
koşu = Doğru
saat = pygame.time. Saat()

sırasında koşma:
dt = saat.tik(60) / 1000.0

için etkinlik içinde pygame.event.get():
eğer event.type == pygame. ÇIKIŞ YAPMAK:
koşu = YANLIŞ

tuşlar = pygame.key.get_pressed()
sınır = player_x < window_width - player_width

eğer anahtarlar[pygame. K_LEFT] Ve oyuncu_x > 0:
oyuncu_x -= 5

eğer anahtarlar[pygame. K_RIGHT] Ve sınır:
player_x += 5

eğer anahtarlar[pygame. K_SPACE]:
bullet_x = player_x + player_width // 2
bullet_y = oyuncu_y
partikül_sistemi.add_particle (bullet_x, bullet_y, KIRMIZI)

partikül_sistemi.update()

pencere.dolgu (SİYAH)
player_pos = (player_x, player_y, player_width, player_height)
pygame.draw.rect (pencere, BEYAZ, player_pos)
partikül_sistemi.draw (pencere)

pygame.display.flip()

# Oyundan çık
pygame.quit()

İşte çıktı:

Boşluk tuşu ( pygame. K_SPACE) basıldığında, mermi konumunda parçacık sistemine bir parçacık ekleyin. Bu, kırmızı parçacıklarla patlama etkisi yaratır.

Toz Etkisi

Uygulayabileceğiniz son görsel geliştirme, tozlu bir arka plan efektidir. Toz efekti, dinamik ve tozlu bir arka plan oluşturan dairesel bir düzende hareket eden küçük gri parçacıklardan oluşacaktır.

güncelle parçacık dahil etmek için sınıf açı Ve hız her parçacık için Açı, hareket yönünü belirler ve hız, parçacıkların dairesel modellerinde ne kadar hızlı hareket ettiğini kontrol eder. Değiştirmek güncelleme() açısına ve hızına bağlı olarak her parçacığın konumunu güncelleme yöntemi.

Ayrıca, güncelleyin Parçacık sistemi yeni parçacık davranışını işlemek için sınıf. Parçacıklar artık oyun penceresi içinde dairesel bir düzende hareket ediyor.

# Parçacık sınıfı
sınıfparçacık:
kesinlikle__içinde__(öz, x, y, yarıçap):
self.x = x
self.y = y
self.yarıçap = yarıçap
self.açı = rasgele.uniform(0, 2 * matematik.pi)
self.speed = rasgele.uniform(0.5, 1.5)

kesinliklegüncelleme(kendi):
self.açı += 0.02
self.x += matematik.cos (self.açı) * self.hız
self.y += matematik.sin (self.açı) * self.hız

eğer self.x < 0:
self.x = pencere_genişliği
elif self.x > pencere_genişliği:
self.x = 0

eğer öz.y < 0:
self.y = pencere_yüksekliği
elif self.y > pencere_yüksekliği:
self.y = 0

kesinlikleçizmek(öz, pencere):
renk = (128, 128, 128)
konum = (int (self.x), int (self.y))
yarıçap = int (self.yarıçap)
pygame.draw.circle (pencere, renk, konum, yarıçap)

# Parçacık sistemi sınıfı
sınıfParçacık sistemi:
kesinlikle__içinde__(kendi):
öz.parçacıklar = []

kesinlikleadd_particle(öz, x, y, yarıçap):
self.particles.append (Parçacık (x, y, yarıçap))

kesinliklegüncelleme(kendi):
için parçacık içinde öz parçacıklar:
parçacık.güncelleme()

kesinlikleçizmek(öz, pencere):
için parçacık içinde öz parçacıklar:
partikül.çizim (pencere)

Toz efektini oyununuza entegre etmek için ana oyun döngüsünde birkaç değişiklik yapmanız gerekiyor. adlı yeni bir dosya oluşturun. toz-partikül.py ve aşağıdaki güncellemelerle kodu ekleyin:

# Toz efekti için parçacık sistemi oluşturun
partikül_sistemi = ParticleSystem()

# Ana oyun döngüsü
koşu = Doğru
saat = pygame.time. Saat()

sırasında koşma:
dt = saat.tik(60) / 1000.0

için etkinlik içinde pygame.event.get():
eğer event.type == pygame. ÇIKIŞ YAPMAK:
koşu = YANLIŞ

parçacık_x = rastgele.randint(0, pencere_genişliği)
parçacık_y = rastgele.randint(0, pencere_yüksekliği)

partikül_sistemi.add_particle (particle_x, partikül_y, 1)

partikül_sistemi.update()

pencere.doldur((0, 0, 0))
partikül_sistemi.draw (pencere)

pygame.display.flip()

# Oyundan çık
pygame.quit()

kullanarak oyun penceresi boyunca rastgele parçacıklar ekleyin. random.randint() işlev. Her parçacığın başlangıç ​​yarıçapı vardır 1. Parçacık sistemini oyun penceresinde güncelleyin ve çizerek dinamik ve tozlu bir arka plan efekti oluşturun.

Ekranda rastgele ama sorunsuz hareket eden birçok parçacık görmelisiniz:

Özel Efektler İçin En İyi Uygulamalar

Pygame oyununuza özel efektler eklerken aşağıdaki en iyi uygulamaları göz önünde bulundurun:

Verim iyileştirmesi

Parçacık sistemleri, oyun performansını etkileyebilecek çok sayıda parçacık içerebilir. Parçacık güncellemelerini ve çizimi optimize etmek için uzamsal bölümleme (ör. Quadtree) gibi teknikleri uygulayın.

Parçacık Geri Dönüşümü

Parçacıkları her karede oluşturup yok etmek yerine, parçacıkları ömürlerinin sonuna geldiklerinde özelliklerini sıfırlayarak yeniden kullanmayı düşünün. Bu, bellek ayırmayı ve yeniden ayırmayı en aza indirmeye yardımcı olur.

Parçacık Havuzu

Çalışma zamanı sırasında yeni bulut sunucuları oluşturma ek yükünden kaçınmak için önceden tahsis edilmiş parçacıklardan oluşan bir havuz tutun. Bu, performansı artırabilir ve bellek parçalanmasını azaltabilir.

Parçacık Sayısını Sınırla

Parçacık sistemlerinin oyun ekranını ezmesini önlemek için, maksimum parçacık sayısına sınırlar koyun ve bu sınıra ulaştıklarında parçacıkları kaldırın. Bu, efektlerin oynanışı engellemeden görsel olarak çekici kalmasını sağlar.

Görsel Tutarlılık

Parçacık efektleri de dahil olmak üzere oyununuz boyunca tutarlı bir görsel stil koruyun. Parçacıkların renklerinin, boyutlarının ve hareket modellerinin genel tema ve sanat tarzıyla tutarlı olduğundan emin olun.

Ses efektleri

Ses efektleri ekleyin parçacık efektlerinizi tamamlamak için. Örneğin, bir patlama efekti oluştuğunda patlama sesleri veya sis veya toz efektleri etkinken ortam sesleri çalın.

Özel Efektlerle Oyunları Daha Eğlenceli Hale Getirin

Pygame oyunlarınıza parçacık sistemleri gibi özel efektler eklemek, oyuncu deneyimini büyük ölçüde artırabilir ve oyunlarınızı oyuncular için daha ilgi çekici ve eğlenceli hale getirebilir. İzler, patlamalar, sis ve toz gibi parçacık efektlerini uygulayarak görsel olarak çarpıcı ve dinamik ortamlar yaratabilirsiniz.

Oyunlarınıza özel efektler eklerken performans optimizasyonunu, parçacık geri dönüşümünü ve görsel tutarlılığı göz önünde bulundurmayı unutmayın. Yaratıcılık ve deneme ile Pygame oyunlarınızı bir sonraki seviyeye taşıyabilir ve sürükleyici ve heyecan verici deneyimlerle oyuncuları büyüleyebilirsiniz.