Sizin gibi okuyucular MUO'yu desteklemeye yardımcı oluyor. Sitemizdeki bağlantıları kullanarak bir satın alma işlemi gerçekleştirdiğinizde, bir ortaklık komisyonu kazanabiliriz. Devamını oku.

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:

instagram viewer

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ğru

sı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.