Jeśli jesteś twórcą gier korzystającym z biblioteki Pygame, prawdopodobnie zetknąłeś się z klasą Sprite. Klasa Sprite to potężne narzędzie do tworzenia postaci w grze, które można łatwo przesuwać, obracać i skalować na ekranie.
Dzięki prostemu programowi w Pythonie możesz dowiedzieć się o procesie tworzenia postaci w grze opartych na duszkach w Pygame. Dowiedz się, jak utworzyć podstawową klasę Sprite, a następnie dodać atrybuty i metody kontrolowania zachowania.
Wprowadzenie do klasy Sprite w Pygame
Klasa Sprite w Pygame to klasa kontenera, która przechowuje wszystkie atrybuty i zachowania postaci z gry. Wywodzi się z klasy Surface Pygame, która reprezentuje obraz o stałej szerokości i wysokości.
Aby z nim pracować, musisz utworzyć nową klasę, która będzie dziedziczyć po klasie Sprite, i zdefiniować wszelkie atrybuty i metody, które ma mieć Twoja postać w grze.
Tworzenie podstawowej klasy Sprite dla postaci w grze
Pierwszy, zainstaluj moduł pygame za pomocą pip. Zrób to za pomocą tego polecenia:
pypeć zainstalować pygame
Aby utworzyć podstawowego sprite'a, musisz zaimportować klasę Sprite z Pygame i utworzyć nową klasę, która po niej dziedziczy. Następnie możesz zdefiniować dowolne atrybuty i metody, które ma mieć Twoja postać w grze.
Na przykład możesz chcieć utworzyć klasę Sprite dla postaci gracza, która może poruszać się w lewo i w prawo po ekranie. Aby to zrobić, możesz zdefiniować następujące atrybuty:
- pozycja: Krotka przechowująca współrzędne x i y duszka na ekranie.
- prędkość: Krotka przechowująca prędkość, z jaką duszek porusza się w poziomie i w pionie.
Oraz następujące metody:
- aktualizacja(): Metoda, która aktualizuje pozycję duszka na podstawie jego prędkości.
- rysować(): Metoda, która rysuje duszka na ekranie.
Oto przykład podstawowej klasy Sprite, która implementuje te atrybuty i metody:
import pygame
klasaGracz(pygame.sprite. Krasnoludek):
pok__w tym__(ja, x, y, prędkość_x, prędkość_y):
Super().__w tym__()
samego siebie.pozycja = (x, y)
samego siebieprędkość = (prędkość_x, prędkość_y)
pokaktualizacja(samego siebie):
samego siebie.pozycja = (samego siebie.pozycja[0] + samego siebie.prędkość[0], samego siebie.pozycja[1] + samego siebie.prędkość[1])
pokrysować(ja, powierzchnia):
pygame.rysować.koło(powierzchnia, (255, 0, 0), samego siebie.pozycja, 10)
Metoda __init__ jest specjalna metoda w klasach Pythona który jest uruchamiany podczas tworzenia instancji klasy. Możesz go użyć do zainicjowania atrybutów instancji.
W tym kodzie metoda __init__ klasy Player przyjmuje cztery argumenty: x, y, prędkość_x i prędkość_y. Argumenty te określają początkową pozycję i prędkość duszka gracza.
Metoda __init__ wywołuje również metodę super().__init__(), która jest metodą __init__ macierzystej klasy Sprite. Jest to konieczne, ponieważ klasa Player jest podklasą klasy Sprite, a metoda __init__ klasy Sprite ustawia pewne atrybuty, których potrzebują wszystkie duszki.
Dodawanie atrybutów i metod do zachowania kontrolnego
Teraz, gdy masz już podstawową klasę Sprite, możesz dodawać atrybuty i metody, aby kontrolować zachowanie swojej postaci w grze. Może to obejmować ruch, atakowanie, skakanie i nie tylko.
Aby dodać te atrybuty i metody, musisz pomyśleć o tym, jakie działania chcesz wykonać w swojej grze postać, którą będziesz mógł wykonać, i zdefiniuj odpowiednie atrybuty i metody w swoim duszku klasa.
Na przykład możesz chcieć dodać metodę kontrolującą ruch duszka, na przykład metodę move_left(), która zmniejsza prędkość duszka na osi x.
Oto przykład zmodyfikowanej klasy Sprite, która zawiera te dodatkowe atrybuty i metody:
klasaGracz(pygame.sprite. Krasnoludek):
pok__w tym__(ja, x, y, prędkość_x, prędkość_y):
Super().__w tym__()
samego siebie.pozycja = (x, y)
samego siebieprędkość = (prędkość_x, prędkość_y)
pokaktualizacja(samego siebie):
samego siebie.pozycja = (samego siebie.pozycja[0] + samego siebie.prędkość[0], samego siebie.pozycja[1] + samego siebie.prędkość[1])
pokrysować(ja, powierzchnia):
pygame.rysować.koło(powierzchnia, (255, 0, 0), samego siebie.pozycja, 10)
pokprzesuń w lewo(samego siebie):
samego siebieprędkość = (-1, samego siebie.prędkość[1])
pokruch w prawo(samego siebie):
samego siebieprędkość = (1, samego siebie.prędkość[1])
Aby użyć klasy Player w swojej grze Pygame, musisz utworzyć instancję tej klasy i w razie potrzeby wywołać jej metody.
Zacznij od utworzenia okna i instancji duszka Player:
# Zainicjuj grę Pygame
pygame.init()# Ustaw rozmiar okna
rozmiar_okna = (640, 480)# Utwórz okno
okno = pygame.display.set_mode (rozmiar_okna)
# Utwórz duszka gracza
gracz = gracz(320, 240, 0, 0)
Następnie zdefiniuj główną pętlę gry, która obsługuje zdarzenia klawiatury i aktualizacje oraz rysuje duszka. Gdy naciśniesz lewy lub prawy klawisz strzałki, duszek przesunie się w odpowiednim kierunku.
# Główna pętla gry
chwilaPRAWDA:
# Obsługuj zdarzenia
Do wydarzenie W pygame.event.get():
Jeśli event.type == pygame. ZREZYGNOWAĆ:
pygame.quit()
sys.exit()
Jeśli event.type == pygame. KLAWIATURA:
Jeśli event.key == pygame. K_LEWO:
gracz.move_left()
Elif event.key == pygame. K_PRAWO:
gracz.move_right()
# Zaktualizuj duszka gracza
gracz.aktualizacja()
# Wyczyść okno
okno.wypełnij((255, 255, 255))
# Narysuj duszka gracza
player.draw (okno)
# Zaktualizuj wyświetlacz
pygame.display.update()
Dzięki powstałemu programowi będziesz mógł kontrolować sprite'a gracza i obserwować, jak rysuje się na ekranie w różnych pozycjach:
Ładowanie i wyświetlanie grafiki sprite za pomocą modułu obrazu
Teraz, gdy masz już podstawową klasę Sprite z atrybutami i metodami kontrolującymi zachowanie, prawdopodobnie będziesz chciał dodać trochę grafiki do swojego duszka. Moduł obrazu Pygame ułatwia ładowanie i wyświetlanie obrazów na ekranie.
Aby załadować obraz, musisz użyć funkcji pygame.image.load(), która jako argument przyjmuje ścieżkę do pliku i zwraca obiekt Surface. Następnie możesz przypisać ten obiekt Surface do atrybutu duszka, takiego jak self.image, którego możesz użyć do narysowania duszka na ekranie.
Na przykład, oto jak możesz załadować obraz i przypisać go do duszka:
import pygame
klasaGracz(pygame.sprite. Krasnoludek):
pok__w tym__(ja, x, y, prędkość_x, prędkość_y, ścieżka_obrazu):
Super().__w tym__()
samego siebie.pozycja = (x, y)
samego siebieprędkość = (prędkość_x, prędkość_y)
samego siebie.image = pygame.image.load (ścieżka_do obrazu)
pokaktualizacja(samego siebie):
samego siebie.pozycja = (samego siebie.pozycja[0] + samego siebie.prędkość[0], samego siebie.pozycja[1] + samego siebie.prędkość[1])
pokrysować(ja, powierzchnia):
powierzchnia.blit(samego siebie.obraz, samego siebie.pozycja)
pokprzesuń w lewo(samego siebie):
samego siebieprędkość = (-1, samego siebie.prędkość[1])
pokruch w prawo(samego siebie):
samego siebieprędkość = (1, samego siebie.prędkość[1])
Ten kod definiuje klasę Player, która rozszerza klasę Sprite Pygame i zawiera atrybuty pozycji, prędkości i obrazu, a także metody aktualizacji pozycji duszka, rysowania duszka na ekranie i kontrolowania ruch.
Możesz to sprawdzić Repozytorium GitHub dla pełnego kodu!
Usprawnij zarządzanie duszkami dzięki klasie Sprite
Klasa Sprite zapewnia wygodny kontener dla wszystkich atrybutów i zachowań postaci w grze, ułatwiając aktualizowanie, rysowanie i kontrolowanie duszka na ekranie.
Implementując klasę Sprite w swojej grze Pygame, możesz poprawić ogólne wrażenia swoich graczy i usprawnić proces tworzenia dla siebie.