Pygame, oyun nesneleri arasındaki çarpışmaları algılamak için çeşitli yerleşik işlevler sağlar. Bunlar paha biçilmezdir, çünkü hareketli nesnelerin tam olarak ne zaman ve nasıl üst üste bindiğini anlamak karmaşık bir görev olabilir.
Pygame modülünü kullanarak oyununuza temel fizik ve çarpışmaları nasıl ekleyeceğinizi öğrenin.
Pygame'in Yerleşik Çarpışma Algılama İşlevleri
En temel yerleşik çarpışma algılama işlevi spritecollide'dir. Bir hareketli grafiği, bir hareketli karakter grubunu ve hareketli karakterlerin çarpıştıklarında "ölmesi" (kaldırılması) gerekip gerekmediğini gösteren bir boole değeri alır. Bu işlev, çarpışan hareketli karakterlerin bir listesini döndürür. İşte nasıl kullanılacağına dair bir örnek:
collided_sprites = pygame.sprite.spritecollide (sprite1, sprite_group, Doğru)
Diğer bir yararlı çarpışma algılama işlevi, iki hareketli grafik grubunu ve bir boole değerini de alan groupcollide işlevidir. Bu işlev, çarpışan hareketli karakterleri anahtar olarak ve çarpıştıkları karakterleri değer olarak içeren bir sözlük döndürür. İşte nasıl kullanılacağına dair bir örnek:
collision_dict = pygame.sprite.groupcollide (grup1, grup2, Doğru, Doğru)
Spritecollide İşlevini Kullanarak Temel Bir Platform Oyunu Oluşturma
Pygame kullanarak temel bir platform oyunu oluşturmak için, kullanıcının kontrol edebileceği bir oyuncu karakteri ve oyuncunun üzerinde durabileceği bir platform karakteri oluşturmanız gerekir. Oyuncu karakterinin platform karakteriyle çarpıştığını algılamak ve oyuncunun platformdan düşmesini önlemek için karakter çarpışması işlevini kullanabilirsiniz.
Başlamak, pip kullanarak pygame modülünü kurun:
pip kurulumu pygame
Daha sonrasında, basit sınıflar oluştur Oyuncu ve Platform için, her ikisinin de Pygame'in Sprite sınıfından miras alması gerekir. Player sınıfı, oyuncunun konumunu hıza göre işlemek için bir güncelleme yöntemine sahip olmalıdır. Ayrıca, yerçekimi etkisini uygulamak için bir y_velocity değişkenine sahip olmalıdır. Platform sınıfı, platformun koordinatlarını alan ve bu boyutta bir yüzey oluşturan bir __init__ yöntemine sahip olmalıdır.
Oyuncu Sınıfı
pygame.sprite kullanarak bir Player sınıfı oluşturabilirsiniz. Karakter modülü. Bu sınıf, oynatıcıyı belirli bir x ve y koordinatlarıyla başlatacaktır. Ardından güncelleme yöntemi, y_velocity değerini artırarak oynatıcının konumunu güncelleyecektir.
içe aktarmak pygame
sınıfoyuncu(pygame.sprite. karakter):
kesin__içinde__(öz, x, y):
süper().__init__()
self.image = pygame. Yüzey((32, 32))
self.rect = self.image.get_rect (üst sol=(x, y))
self.y_hız = 0
kesingüncelleme(kendi):
self.rect.y += self.y_velocity
Platform Sınıfı
Platform sınıfı ayrıca pygame.sprite'ı kullanır. Karakter modülü. Bu sınıf, verilen x ve y koordinatlarının yanı sıra bir genişlik ve yükseklik ile platformu başlatacaktır.
sınıfplatformu(pygame.sprite. karakter):
kesin__içinde__(öz, x, y, genişlik, yükseklik):
süper().__init__()
self.image = pygame. Yüzey((genişlik, yükseklik))
self.rect = self.image.get_rect (üst sol=(x, y))
Oyun Döngüsü
Oyun döngüsü, 640x480 boyutunda bir pencere oluşturmanıza izin verecektir. Daha sonra, herhangi bir olayı kontrol edecek bir döngü çalıştıracak, örneğin bir çık komutu gibi. Ayrıca, oyuncu ile platform arasındaki çarpışmaları da kontrol edecektir. Son olarak ekranı beyaz bir renkle dolduracak, oynatıcıyı ve platformu çizecek ve ardından ekranı çevirecektir.
oyuncu = Oyuncu(100, 300)
player_group = pygame.sprite. grup()
player_group.add (oyuncu)platform = platform(50, 400, 100, 20)
platform_group = pygame.sprite. grup()
platform_group.add (platform)# Pygame'i başlat ve pencere oluştur
pygame.init()
ekran = pygame.display.set_mode((640, 480))# Ana oyun döngüsü
koşu = Doğrusırasında koşma:
için etkinlik içinde pygame.event.get():
eğer event.type == pygame. ÇIKIŞ YAPMAK:
koşu = YANLIŞ
player_group.update()
çarpıştı = pygame.sprite.spritecollide (oyuncu, platform_group, YANLIŞ)eğer çarpıştı:
player.y_velocity = 0
ekran.fill((255, 255, 255))
player_group.draw (ekran)
platform_group.draw (ekran)
pygame.display.flip()
pygame.quit()
Çıktı aşağıdadır:
Yerçekimi ve Zıplama Davranışını Uygulama
Platform oyununuzda yerçekimi ve zıplama davranışını uygulamak için, oyuncu karakterinize bir y hızı eklemeniz ve her karedeki y konumunu güncellemeniz gerekir. Bunu yapmak için Player sınıfı içindeki update yöntemini kullanabilir ve aşağıdaki kod parçacığını ekleyebilirsiniz:
sınıfoyuncu(pygame.sprite. karakter):
kesin__içinde__(öz, x, y):
süper().__init__()
self.image = pygame. Yüzey((32, 32))
self.rect = self.image.get_rect (üst sol=(x, y))
self.y_hız = 0
kesingüncelleme(kendi):
self.rect.y += self.y_velocity
self.y_velocity += AĞIRLIK # y hızına yerçekimi uygula
Artık güncelleme yöntemini her çağırdığınızda, oyuncunun konumunu hızına ve yerçekimine göre güncelleyecektir.
Oyuncu karakterinin zıplamasını sağlamak için atlama eylemini belirli bir tuşa veya düğmeye bağlayabilir ve oyuncunun y hızını negatif bir değerle güncelleyebilirsiniz. Aşağıdaki kod parçacığı, bir oyuncu boşluk çubuğuna bastığında nasıl atlanacağına bir örnektir.
JUMP_VELOCITY = -10
# oyun döngüsünün içinde
eğer event.type == pygame. Tuş aşağı Ve event.key == pygame. K_SPACE:
player.y_velocity = JUMP_VELOCITY
Anahtar değerini kontrol etmeden önce olayın bir KEYDOWN olayı olduğundan emin olmak için event.type'ı kontrol etmeniz gerekeceğini unutmayın.
Sürtünme ve İvme gibi Temel Fizik Ekleme
Platform oyununuza sürtünme ve ivme gibi temel fizik eklemek için, her karede oyuncu hareketli grafiğinizin x hızını güncellemeniz gerekecek. Oyuncu sınıfına x hızı ekleyebilir ve y hızıyla aynı şekilde güncelleyebilirsiniz. Sürtünmeyi uygulamak için, oyuncu karakterinin x hızını her karede küçük bir miktar azaltabilirsiniz. Örneğin, Player sınıfının update yönteminin içine aşağıdaki kod parçacığını ekleyebilirsiniz:
SÜRTÜNME = 0.9
sınıfoyuncu(pygame.sprite. karakter):
kesin__içinde__(öz, x, y):
süper().__init__()
self.image = pygame. Yüzey((32, 32))
self.rect = self.image.get_rect (üst sol=(x, y))
self.y_hız = 0
self.x_velocity = 0
kesingüncelleme(kendi):
self.rect.y += self.y_velocity
self.rect.x += self.x_velocity
self.y_velocity += AĞIRLIK # y hızına yerçekimi uygula
self.x_velocity *= SÜRTÜNME # Sürtünmeyi x hızına uygula
İvmeyi uygulamak için yatay hareket için player_movement değişkenini ayarlayabilir ve player_movement değerine göre oyuncu hareketli grafiğinin x hızını güncelleyebilirsiniz. Bunu, hareketi belirli tuşlara veya düğmelere bağlayarak ve oyuncunun x hızını olay döngüsünde güncelleyerek yapabilirsiniz, örneğin:
HIZLANMA = 0.5
oyuncu_hareket = 0
eğer event.type == pygame. TUŞ AŞAĞI:
eğer event.key == pygame. K_LEFT:
oyuncu_hareket = -1
elif event.key == pygame. K_RIGHT:
oyuncu_hareket = 1
elif event.type == pygame. Tuş:
eğer olay.anahtar içinde (pi oyunu. K_LEFT, pygame. K_RIGHT):
oyuncu_hareket = 0
player.x_velocity += player_movement * HIZLANDIRMA
Bu teknikleri kullanarak, Pygame'in yerleşik çarpışma algılama işlevlerini ve temel fiziği kullanarak basit ama eğlenceli bir platform oyunu oluşturabilirsiniz. Biraz yaratıcılık ve denemeyle, bu teknikleri çeşitli farklı oyunlar ve oyun mekaniği oluşturmak için kullanabilirsiniz.
Kodun tamamını şurada bulabilirsiniz: GitHub deposu.
Çıktı aşağıdadır:
Çarpışmalarla Kullanıcı Etkileşimini Artırın
Çoğu oyun, bir çeşit çarpışma tespiti gerektirir. Basit platform oyunlarından karmaşık fizik tabanlı simülasyonlara kadar çok çeşitli oyun mekaniği oluşturmak için çarpışmaları kullanabilirsiniz.
Yerçekimi, sürtünme ve hızlanma gibi temel fiziği uygulamak, oyun nesnelerine gerçekçilik ve ağırlık hissi ekleyerek kullanıcı katılımını büyük ölçüde artırabilir.