Python'un Arcade kitaplığı, en basit renk tabanlı animasyonlardan karmaşık parçacık modellemeye kadar her şeyi kapsar.
Animasyon, video oyunlarının görsel çekiciliğini ve katılımını artırmada hayati bir rol oynar. Arcade kitaplığı, 2B oyunlar oluşturmak için bir Python çerçevesidir. Animasyonları oyun projelerinize dahil etmenin basit ve etkili bir yolunu sunar.
Temel hareket animasyonları ve oyun etkinlikleriyle senkronize animasyonlar oluşturmak için Arcade kitaplığını kullanabilirsiniz.
Basit Bir Oyun Yaratın
Başlamadan önce, sahip olduğunuzdan emin olun. cihazınızda yüklü pip. Arcade kitaplığını yüklemek için bu komutu kullanın:
pip yükleme çarşı
Bundan sonra, adlı bir Python dosyası oluşturun. basit oyun.py ve oyuncunun sola ve sağa hareket edebileceği bir oyun kurarak başlayın.
Bu makalede kullanılan kod bu makalede mevcuttur. GitHub deposu ve MIT lisansı altında ücretsiz olarak kullanabilirsiniz.
Arcade kitaplığını kullanarak bir pencere oluşturabilir, oyun ortamını kurabilir ve oyuncu girişini yönetebilirsiniz. İşte başlamak için bir kod parçacığı:
içe aktarmak oyun makinesi
EKRAN_GENİŞLİK = 800
EKRAN_YÜKSEKLİK = 600sınıfBenim oyunum(oyun makinesi. pencere):
kesin__içinde__(kendi):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Benim oyunum")
self.player_x = SCREEN_WIDTH // 2
self.player_y = SCREEN_HEIGHT // 2kesinon_draw(kendi):
arcade.start_render()
col = çarşı.renk. MAVİ
arcade.draw_circle_filled (self.player_x, self.player_y, 20, sütun)kesinon_key_press(self, key, değiştiriciler):
eğer anahtar == çarşı.key. SOL:
self.player_x -= 10
elif anahtar == çarşı.key. SAĞ:
self.player_x += 10kesinana():
oyun = Oyunum()
çarşı.run()
eğer __isim__ == "__ana__":
ana()
Temel Hareket Animasyonu Ekle
Şimdi oyununuzu bir adım öteye taşıyın ve oyuncu nesnesine temel hareket animasyonu ekleyin. canlandırmak için hareketli oyuncu, 3 farklı daire oluşturun ve oyuncu hareket etmeye başladığında sırayla aralarında yineleyin. İşte için güncellenmiş kod parçacığı hareket-animasyon.py dosya:
sınıfBenim oyunum(oyun makinesi. pencere):
kesin__içinde__(kendi):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Benim oyunum")
self.player_x = SCREEN_WIDTH // 2
self.player_y = SCREEN_HEIGHT // 2
self.frame_counter = 0kesinon_draw(kendi):
arcade.start_render()
col1 = çarşı.renk. MAVİ
col2 = çarşı.renk. YEŞİL
col3 = çarşı.renk. KIRMIZIeğer 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, sütun2 )
başka:
arcade.draw_circle_filled (self.player_x, self.player_y, 20, sütun3)
kesinon_key_press(self, key, değiştiriciler):
eğer anahtar == çarşı.key. SOL:
self.player_x -= 10
self.frame_counter = (self.frame_counter + 1) % 30
elif anahtar == çarşı.key. SAĞ:
self.player_x += 10
self.frame_counter = (self.frame_counter + 1) % 30
İşte bir örnek çıktı çerçevesi:
Animasyon Hızını ve Yönünü Kontrol Etme
Animasyon hızını kontrol etmek için bir kare hızı sistemi sunabilirsiniz. Oyuncunun hareket yönüne göre karelerin sırasını da değiştirebilirsiniz. Oyuncu soldan sağa hareket ettiğinde, çerçeveler ters sırada görüntülenecektir.
İşte için değiştirilmiş kod parçacığı kare hızı.py dosya:
sınıfBenim oyunum(oyun makinesi. pencere):
kesin__içinde__(kendi):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Benim oyunum")
self.player_x = SCREEN_WIDTH // 2
self.player_y = SCREEN_HEIGHT // 2
self.frame_counter = 0
col1 = çarşı.renk. MAVİ
col2 = çarşı.renk. YEŞİL
col3 = çarşı.renk. KIRMIZI
self.frames = [col1, col2, col3]
self.frame_rate = 10kesinon_draw(kendi):
arcade.start_render()
frame_index = self.frame_counter // self.frame_rate % len (self.frames)eğer self.player_x < SCREEN_WIDTH // 2:
frame_index = len (self.frames) - 1 - frame_indexindeks = self.frames[frame_index]
arcade.draw_circle_filled (self.player_x, self.player_y, 20, dizin)
kesinon_key_press(self, key, değiştiriciler):
eğer anahtar == çarşı.key. SOL:
self.player_x -= 10
self.frame_counter += 1
elif anahtar == çarşı.key. SAĞ:
self.player_x += 10
self.frame_counter += 1
Modül operatörünü kullanın % ile len (self.frames) olmasını sağlamak için frame_index her zaman kullanılabilir çerçeve aralığında kalır. Bu engeller Dizin Hatası animasyon kareler arasında döngüye girdiğinde meydana gelen.
Ayarla kare hızı animasyon hızını kontrol etmek ve oyun nesnelerinizin animasyonlu hareketinin keyfini çıkarmak için değer.
Ek Özellikler Dahil
Arcade kitaplığı, animasyonlarınızı geliştirmek için çeşitli özellikler sunar.
Parçacık Efektleri
Oyununuza gerçekçilik katmak için patlama veya duman gibi parçacık efektleri oluşturabilirsiniz. adlı bir dosya oluşturun. parçacık.py ve Python ve arcade kitaplığını kullanarak basit bir parçacık sistemi uygulaması için aşağıdaki kodu ekleyin:
içe aktarmak oyun makinesi
içe aktarmak rastgele# Ekran boyutları
EKRAN_GENİŞLİK = 800
EKRAN_YÜKSEKLİK = 600# Renkler
BEYAZ = (255, 255, 255)# Parçacık sınıfı
sınıfparçacık:
kesin__içinde__(öz, x, y, dx, dy, yarıçap, renk, ömür):
self.x = x
self.y = y
self.dx = dx
self.dy = dy
self.yarıçap = yarıçap
öz.renk = renk
self.lifespan = ömürkesingüncelleme(kendi):
self.x += self.dx
self.y += self.dy
self.lifespan -= 1kesinçizmek(kendi):
arcade.draw_circle_filled (self.x, self.y, self.radius, self.color)# Oyun sınıfı
sınıfBenim oyunum(oyun makinesi. pencere):
kesin__içinde__(öz, genişlik, yükseklik):
super().__init__(genişlik, yükseklik, "Parçacık Örneği")
öz.parçacıklar = []kesinkurmak(kendi):
# Parçacıklar oluştur
için _ içinde menzil(100):
x = rasgele.rastgele aralık (SCREEN_WIDTH)
y = rastgele.rastgele aralık (SCREEN_HEIGHT)
dx = rastgele.üniform(-1, 1)
dy = rastgele.üniform(-1, 1)
yarıçap = rastgele.üniform(2, 5)
renk = çarşı.renk. BEYAZ
yaşam süresi = random.randint(60, 120)
parçacık = Parçacık (x, y, dx, dy, yarıçap, renk, ömür)
self.particles.append (parçacık)kesinon_draw(kendi):
arcade.start_render()
için parçacık içinde öz parçacıklar:
parçacık.draw()kesingüncelleme(öz, delta_time):
için parçacık içinde öz parçacıklar:
parçacık.güncelleme()eğer parçacık.ömrü <= 0:
self.particles.remove (parçacık)kesinana():
oyun = Oyunum (SCREEN_WIDTH, SCREEN_HEIGHT)
oyun.setup()
çarşı.run()
eğer __isim__ == "__ana__":
ana()
Birçok hareket eden parçacığı içeren bir animasyon görmelisiniz:
Etkileşimli Animasyonlar
Kullanıcı girdilerine veya oyun olaylarına yanıt veren etkileşimli animasyonlar uygulayın. Örneğin, oyuncu bir nesneyle etkileşime girdiğinde canlanabilir, renk değiştirebilir veya bir şekilde dönüşebilir. Bu etkileşimli animasyonlar geri bildirim sağlar ve oyuncunun oyunla etkileşimini artırır. İşte kodu interaktif-animasyon.py dosya:
içe aktarmak oyun makinesi
# Ekran boyutları
EKRAN_GENİŞLİK = 800
EKRAN_YÜKSEKLİK = 600# Renkler
BEYAZ = (255, 255, 255)
KIRMIZI = (255, 0, 0)sınıfBenim oyunum(oyun makinesi. pencere):
kesin__içinde__(öz, genişlik, yükseklik):
super().__init__(genişlik, yükseklik, "Etkileşimli Animasyon")
self.player_x = 400
self.player_y = 300
self.player_radius = 30
self.player_color = KIRMIZI
self.animation_radius = 60
self.animation_color = BEYAZ
self.animation_active = YANLIŞkesinon_draw(kendi):
arcade.start_render()arcade.draw_circle_filled (self.player_x,
self.player_y,
self.player_radius,
self.player_color)eğer self.animation_active:
arcade.draw_circle_filled (self.player_x,
self.player_y,
self.animation_radius,
self.animation_color)kesinon_mouse_press(self, x, y, button, değiştiriciler):
eğer (self.player_x - self.player_radius <=
x <= self.player_x + self.player_radius Ve
self.player_y - self.player_radius <=
y <= self.player_y + self.player_radius
):
self.animation_active = Doğrukesingüncelleme(öz, delta_time):
eğer self.animation_active:
self.animation_radius += 1eğer self.animation_radius > 100:
self.animation_active = YANLIŞ
self.animation_radius = 0kesinana():
oyun = Oyunum (SCREEN_WIDTH, SCREEN_HEIGHT)
çarşı.run()
eğer __isim__ == "__ana__":
ana()
gibi gerekli yöntemleri geçersiz kılın. on_draw, on_mouse_press, Ve güncelleme, oynatıcıyı ve animasyonu çizmek, fare tıklamalarını işlemek ve animasyonu güncellemek için.
Oyuncuyu çizmek için arcade.draw_circle_filled alan fonksiyon, (x, y) merkezin koordinatları, yarıçap ve renk bağımsız değişken olarak. Draw_circle_filled işlevi, Oyun varlıklarını çizmek için kullanabileceğiniz Arcade araçları. Bu durumda, yarıçapı zamanla değiştirerek büyüyen bir daire çizebilirsiniz.
bu on_mouse_press Yöntem, kullanıcı fareyi tıklattığında çalışır. Fare koordinatlarının oynatıcı nesnesinin sınırları içinde olup olmadığını kontrol eder ve varsa animasyonu etkinleştirir.
Animasyon Eklemek İçin En İyi Uygulamalar
Oyunlarınıza animasyon eklerken aşağıdaki en iyi uygulamaları göz önünde bulundurun:
Animasyon Sayısını Sınırla
Birçok kareye sahip çok sayıda animasyona sahip olmak performansı etkileyebilir. Özellikle oyundaki kritik olmayan öğeler için gereken animasyon veya kare sayısını en aza indirmeyi düşünün. Animasyonları basitleştirmek, tutarlı bir kare hızını korumaya ve kaynak kullanımını optimize etmeye yardımcı olabilir.
Benzer Nesneleri Toplu İşleme
Aynı animasyon çerçevelerini ve dokuları paylaşan benzer nesneleri gruplandırın ve bunları bir toplu iş olarak işleyin. Toplu işlem, çizim çağrılarının sayısını azaltır ve bu da performansın artmasına neden olur. Bu teknik, aynı hareketli grafik sayfasını kullanan veya benzer animasyon dizilerine sahip nesneleri canlandırırken özellikle kullanışlıdır.
Düzgün Animasyon için Enterpolasyon Kullanın
Düzgün animasyon geçişleri elde etmek için doğrusal enterpolasyon (lerping) gibi enterpolasyon teknikleri uygulayın. Enterpolasyon, akıcı hareketler oluşturmak için animasyon ana kareleri arasındaki ara değerleri hesaplar. Bu yaklaşım, kareler arasındaki ani sıçramaları veya sarsıntılı hareketleri önleyerek görsel olarak daha çekici animasyonlar sağlar.
Animasyon Hızını ve Zamanlamayı Dikkate Alın
Oyununuz için doğru dengeyi bulmak için farklı animasyon hızları ve zamanlamaları ile denemeler yapın. Hız, hızlanma veya yavaşlamada varyasyonlar oluşturmak için kare süresini ayarlayın veya farklı animasyon dizileri kullanın. Bu ayarlamalar oyununuzun animasyonlarına derinlik ve karakter katabilir.
Test Et ve Optimize Et
Animasyonlarınızı farklı cihazlarda düzenli olarak test edin ve performansı izleyin. Potansiyel darboğazları veya yavaşlamaları arayın ve buna göre optimize edin. Bu süreç, çok çeşitli cihazlarda sorunsuz ve tutarlı animasyon deneyimleri sağlamaya yardımcı olur.
Animasyonla Oyunları Daha İlgi Çekici Hale Getirin
Oyunlarınıza animasyonlar eklemek, oyuncunun katılımını ve oyunun içine dalmasını önemli ölçüde artırabilir. Animasyonlar, oyuncu eylemlerine görsel geri bildirim sağlayarak oyunu daha sezgisel ve eğlenceli hale getiriyor. Gerçekçilik ve heyecan duygusu yaratarak oyun dünyalarına hayat verirler.
İster koşan bir karakter, ister patlayan bir nesne veya basit bir geçiş efekti olsun, animasyonlar daha dinamik ve büyüleyici bir oyun deneyimine katkıda bulunur.