Čtenáři jako vy pomáhají podporovat MUO. Když provedete nákup pomocí odkazů na našich stránkách, můžeme získat provizi přidružené společnosti. Přečtěte si více.

Pokud jste herní vývojáři používající knihovnu Pygame, pravděpodobně jste narazili na třídu Sprite. Třída Sprite je výkonný nástroj pro vytváření herních postav, které můžete na obrazovce snadno přesouvat, otáčet a měnit velikost.

Pomocí jednoduchého programu Python se můžete dozvědět o procesu vytváření herních postav založených na spritech v Pygame. Zjistěte, jak vytvořit základní třídu Sprite a poté přidat atributy a metody pro ovládání chování.

Úvod do Pygame's Sprite Class

Třída Sprite v Pygame je kontejnerová třída, která obsahuje všechny atributy a chování herní postavy. Odvozuje se od třídy Surface Pygame, která představuje obrázek s pevnou šířkou a výškou.

Abyste s ním mohli pracovat, budete muset vytvořit novou třídu, která zdědí třídu Sprite, a definovat všechny atributy a metody, které chcete, aby vaše herní postava měla.

instagram viewer

Vytvoření základní třídy sprite pro herní postavu

První, nainstalujte modul pygame pomocí pip. Udělejte to pomocí tohoto příkazu:

pip Nainstalujte pygame

Chcete-li vytvořit základní sprite, budete muset importovat třídu Sprite z Pygame a vytvořit novou třídu, která z ní zdědí. Poté můžete definovat jakékoli atributy a metody, které chcete, aby vaše herní postava měla.

Můžete například chtít vytvořit třídu Sprite pro hráčskou postavu, která se může pohybovat po obrazovce doleva a doprava. Chcete-li to provést, můžete definovat následující atributy:

  • pozice: N-tice, která drží souřadnice x a y spritu na obrazovce.
  • rychlost: Tuple, která drží rychlost, kterou se sprite pohybuje horizontálně a vertikálně.

A následující metody:

  • Aktualizace(): Metoda, která aktualizuje polohu spritu na základě jeho rychlosti.
  • kreslit(): Metoda, která vykreslí sprite na obrazovku.

Zde je příklad základní třídy Sprite, která implementuje tyto atributy a metody:

import pygame

třídaHráč(pygame.sprite. Skřítek):
def__init__(self, x, y, velocity_x, velocity_y):
super().__init__()
.position = (x, y)
.velocity = (rychlost_x, rychlost_y)

defAktualizace(já):
.position = (.pozice[0] + .rychlost[0], .pozice[1] + .rychlost[1])

defkreslit(vlastní, povrch):
pygame.kreslit.kruh(povrch, (255, 0, 0), .pozice, 10)

Metoda __init__ je speciální metoda ve třídách Pythonu který se spustí, když vytvoříte instanci třídy. Můžete jej použít k inicializaci atributů instance.

V tomto kódu používá metoda __init__ třídy Player čtyři argumenty: x, y, velocity_x a velocity_y. Tyto argumenty nastavují počáteční pozici a rychlost skřítka hráče.

Metoda __init__ také volá metodu super().__init__(), což je metoda __init__ nadřazené třídy Sprite. To je nutné, protože třída Player je podtřídou třídy Sprite a metoda __init__ třídy Sprite nastavuje některé atributy, které potřebují všichni sprite.

Přidání atributů a metod ke kontrole chování

Nyní, když máte základní třídu Sprite, můžete přidat atributy a metody pro ovládání chování vaší herní postavy. To může zahrnovat věci jako pohyb, útok, skákání a další.

Chcete-li přidat tyto atributy a metody, budete se muset zamyslet nad tím, jaké akce chcete ve hře znak, abyste mohli provádět, a definovat odpovídající atributy a metody ve vašem Sprite třída.

Můžete například chtít přidat metodu pro ovládání pohybu spritu, jako je metoda move_left(), která sníží rychlost spritu na ose x.

Zde je příklad upravené třídy Sprite, která obsahuje tyto další atributy a metody:

třídaHráč(pygame.sprite. Skřítek):
def__init__(self, x, y, velocity_x, velocity_y):
super().__init__()
.position = (x, y)
.velocity = (rychlost_x, rychlost_y)

defAktualizace(já):
.position = (.pozice[0] + .rychlost[0], .pozice[1] + .rychlost[1])

defkreslit(vlastní, povrch):
pygame.kreslit.kruh(povrch, (255, 0, 0), .pozice, 10)

defpohyb doleva(já):
.velocity = (-1, .rychlost[1])

defpohyb vpravo(já):
.velocity = (1, .rychlost[1])

Chcete-li použít třídu Player ve své hře Pygame, budete muset vytvořit instanci třídy a podle potřeby volat její metody.

Začněte vytvořením okna a instance sprite Player:

# Inicializujte Pygame
pygame.init()

# Nastavte velikost okna
velikost_okna = (640, 480)

# Vytvořte okno
okno = pygame.display.set_mode (velikost_okna)

# Vytvořte skřítka hráče
hráč = hráč (320, 240, 0, 0)

Poté definujte hlavní herní smyčku, která zpracovává události na klávesnici a aktualizace a kreslí skřítka. Když stisknete levou nebo pravou šipku, sprite se bude pohybovat v odpovídajícím směru.

# Hlavní herní smyčka
zatímcoSkutečný:
# Zvládněte události
pro událost v pygame.event.get():
-li event.type == pygame. PŘESTAT:
pygame.quit()
sys.exit()

-li event.type == pygame. KEYDOWN:
-li event.key == pygame. K_LEFT:
player.move_left()
elif event.key == pygame. K_RIGHT:
player.move_right()

# Aktualizujte sprite hráče
player.update()

# Vyčistěte okno
window.fill((255, 255, 255))

# Nakreslete skřítka hráče
player.draw (okno)

# Aktualizujte displej
pygame.display.update()

S výsledným programem budete moci ovládat skřítka hráče a sledovat, jak se kreslí na obrazovku v různých pozicích:

Načítání a zobrazování grafiky Sprite pomocí obrazového modulu

Nyní, když máte základní třídu Sprite s atributy a metodami pro ovládání chování, pravděpodobně budete chtít do svého sprite přidat nějakou grafiku. Obrazový modul Pygame usnadňuje načítání a zobrazování obrázků na obrazovce.

Chcete-li načíst obrázek, budete muset použít funkci pygame.image.load(), která vezme cestu k souboru jako argument a vrátí objekt Surface. Tento objekt Surface pak můžete přiřadit atributu sprite, jako je self.image, který můžete použít k nakreslení sprite na obrazovku.

Zde je například postup, jak můžete načíst obrázek a přiřadit jej ke spritu:

import pygame

třídaHráč(pygame.sprite. Skřítek):
def__init__(self, x, y, velocity_x, velocity_y, image_path):
super().__init__()
.position = (x, y)
.velocity = (rychlost_x, rychlost_y)
.image = pygame.image.load (cesta k obrázku)

defAktualizace(já):
.position = (.pozice[0] + .rychlost[0], .pozice[1] + .rychlost[1])

defkreslit(vlastní, povrch):
povrch.blit(.obraz, .pozice)

defpohyb doleva(já):
.velocity = (-1, .rychlost[1])

defpohyb vpravo(já):
.velocity = (1, .rychlost[1])

Tento kód definuje třídu Player, která rozšiřuje třídu Sprite Pygame a zahrnuje atributy pro pozici, rychlost a obrázek, stejně jako metody pro aktualizaci polohy skřítka, přikreslení skřítka na obrazovku a ovládání hnutí.

Můžete se podívat na toto Úložiště GitHub pro úplný kód!

Zlepšete správu sprite pomocí třídy Sprite

Třída Sprite poskytuje pohodlný kontejner pro všechny atributy a chování herní postavy, což usnadňuje aktualizaci, kreslení a ovládání sprite na obrazovce.

Zavedením třídy Sprite do vaší hry Pygame můžete zlepšit celkový zážitek pro své hráče a zefektivnit proces vývoje pro sebe.