Úvod do Pygame Zero¶
Vytvorenie okna¶
Najprv vytvorte prázdny súbor s názvom intro.py
.
Uistite sa, že sa po spustení nasledujúceho príkazu vytvorí prázdne okno
pgzrun intro.py
Všetko v knižnici Pygame Zero je voliteľné; prázdny súbor je valídnym skriptom Pygame Zero!
Hru môžete ukončiť kliknutím na ikonu pre zatvorenie okna alebo stlačením kláves
Ctrl-Q
(⌘-Q
na Mac-u). Ak z nejakého dôvodu prestane hra reagovať, môžete
ju ukončiť stlačením Ctrl-C
v okne vášho terminálu.
Vykreslenie pozadia¶
Teraz pridáme funkciu draw()
a nastavíme rozmery okna. Pygame Zero
bude túto funkciu volať zakaždým, keď bude potrebovať kresliť na obrazovku.
Do súboru intro.py
pridajte tieto riadky:
1 2 3 4 5 | WIDTH = 300
HEIGHT = 300
def draw():
screen.fill((128, 0, 0))
|
Znovu spustite príkaz pgzrun intro.py
čím sa obrazovka zmení na červený štvorec!
Ako tento kód pracuje?
Premenné WIDTH
a HEIGHT
nastavujú šírku a výšku okna. Tento kód teda nastaví
šírku aj výšku okna na 300 pixelov.
screen
je zabudovaný objekt, ktorý reprezentuje plochu okna. Obsahuje
množstvo metód pre vykreslovanie sprite-ov a tvarov. Zavolaním metódy
screen.fill()
dôjde k vyfarbeniu obrazovky jednou farbou, ktorá je definovaná
ako trojica (červená, zelená, modrá)
. (128, 0, 0)
bude stredne
tmavočervená. Vyskúšajte si meniť hodnoty týchto čísiel v rozsahu od 0 do 255
a sledujte, aké farby dokážete vytvoriť.
Poďme nastaviť sprite, ktorý môžeme animovať.
Kreslíme sprite¶
Ešte predtým, ako čokoľvek nakreslíme, potrebujeme stiahnuť sprite s mimozemšťanom. Kliknite na neho pravým tlačidlom a uložte ho (Vyberte „Uložit obrázok ako…“ alebo niečo podobné).
(Tento sprite je priesvitný (má „alpha“ kanál), čo je pre hry skvelé! Je ale navrhnutý pre tmavé pozadie, takže pokiaľ sa v hre nezobrazí, nemusíte vidieť mimozemšťanovu prilbu).
Tip
Množstvo voľných spritov, vrátane tohto, môžete nájsť na stránke kenney.nl. Tento sprite pochádza z balíka Platformer Art Deluxe pack.
Súbor potrebujete uložiť na správne miesto, aby ho knižnica Pygame Zero vedela nájsť.
Vytvorte priečinok s názvom images
a obrázok do neho ulože pod názvom alien.png
.
Názvy oboch musia byť malými písmenami. V opačnom prípade sa bude knižnica sťažovať,
aby vás upozornila na potenciálny problém v multiplatformnej kompatibilite.
Ak ste to urobili, váš projekt by mal vyzerať takto:
.
├── images/
│ └── alien.png
└── intro.py
images/
je štandardný priečinok, ktorý bude Pygame Zero používať na hľadanie
vašich obrázkov.
V knižnici sa nachádza zabudovaná trieda s názvom Actor
, ktorú môžete použiť
na reprezentovanie grafiky, ktorá sa má vykresliť na obrazovku.
Poďme jednu vytvoriť. Upravte súbor intro.py
takto:
1 2 3 4 5 6 7 8 9 | alien = Actor('alien')
alien.pos = 100, 56
WIDTH = 500
HEIGHT = alien.height + 20
def draw():
screen.clear()
alien.draw()
|
Váš mimozemšťan by sa mal teraz zobraziť na obrazovke! Odovzdaním reťazca 'alien'
do konštruktora triedy Actor
sa automaticky nahrá sprite a má k dispozícii
atribúty ako pozícia a rozmer. To nám umožní nastaviť HEIGHT
okna na
základe výšky mimozemšťana.
Metóda alien.draw()
vykreslí sprite na obrazovku na jeho aktuálnu pozíciu.
Hýbeme s mimozemšťanom¶
Let’s set the alien off-screen; zmeňte riadok obsahujúci alien.pos
na:
alien.topright = 0, 10
Všimnite si, ako sa priradením hodnoty do topright
zmení poloha mimozemšťana
vzhľadom na jeho pravý horný roh. If the right-hand edge of the alien is at 0
, the
alien is just offscreen to the left. Teraz ho poďme rozpohybovať. Pridajte tieto
riadky na koniec súboru:
def update():
alien.left += 2
if alien.left > WIDTH:
alien.right = 0
Pygame Zero zavolá vašu funkciu update()
raz za každý snímok. Posunutím
mimozemšťana o niekoľko pixelov počas každého snímku spôsobí, že sa bude po obrazovke presúvať.
Keď dosiahne pravý okraj obrazovky, znovu ho spustíme od ľavého okraja.
Vaše funkcie draw()
a update()
pracujú veľmi podobne, ale sú navrhnuté pre dva rozličné účely.
Funkcia draw()
zobrazí mimozemšťana na jeho aktuálnu pozíciu, zatiaľ čo
funkcia update()
sa použije na aktualizovanie pohybu mimozemšťana po obrazovke.
Ošetrenie kliknutí¶
Teraz poďme zabezpečiť, aby hra urobila niečo po kliknutí na mimozemšťana. Aby sme
to mohli spraviť, potrebujeme zadefinovať funkciu s názvom on_mouse_down()
.
Pridajte do kódu tieto riadky:
1 2 3 4 5 | def on_mouse_down(pos):
if alien.collidepoint(pos):
print("Au!")
else:
print("Netrafil si!")
|
Spustite hru a skúste na mimozemšťana klikať.
Knižnica Pygame Zero je pomerne chytrá čo sa týka volania vašich funkcií. Ak v
definícii vašej funkcie nepoužijete parameter pos
, Pygame Zero ju bude volať
bez pozície. Funkcia on_mouse_down
taktiež obsahuje parameter button
.
Takže ju môžete napísať takto:
def on_mouse_down():
print("Klikol si!")
alebo takto:
def on_mouse_down(pos, button):
if button == mouse.LEFT and alien.collidepoint(pos):
print("Au!")
Zvuky a obrázky¶
Teraz poďme zabezpečiť, aby mimozemšťan vyzeral zranene. Uložte si tieto súbory:
- alien_hurt.png - súbor uložte ako
alien_hurt.png
do priečinkuimages
. - eep.wav - vytvorte priečinok s názvom
sounds
a uložte do neho tento súbor akoeep.wav
.
Váš projekt by mal teraz vyzerať takto:
.
├── images/
│ └── alien.png
│ └── alien_hurt.png
├── sounds/
│ └── eep.wav
└── intro.py
sounds/
je štandardný priečinok, v ktorom bude knižnica Pygame Zero hľadať
vaše zvukové súbory.
Teraz zmeňme funkciu on_mouse_down
tak, aby použila tieto nové zdroje:
def on_mouse_down(pos):
if alien.collidepoint(pos):
alien.image = 'alien_hurt'
sounds.eep.play()
Ak teraz kliknete na mimozemšťana, mali by ste počuť zvuk a sprite sa zmení na nešťastného mimozemšťana.
V hre sa však nachádza chyba; mimozemšťan sa už nikdy nezmení späť na šťastného (zvuk sa však vždy po kliknutí prehrá). Túto chybu preto hneď opravíme.
Clock¶
Ak poznáte Python mimo programovania počítačových hier, určite poznáte metódu
time.sleep()
, ktorá pozastaví vykonávanie programu. To vás môže zvádzať k
napísaniu takéhoto programu:
1 2 3 4 5 6 | def on_mouse_down(pos):
if alien.collidepoint(pos):
alien.image = 'alien_hurt'
sounds.eep.play()
time.sleep(1)
alien.image = 'alien'
|
Žiaľ, tento prístup nie je vôbec vhodný pre použitie v počítačových hrách.
Metóda time.sleep()
blokuje všetky činnosti a my chceme, aby hra pokračovala
v behu a veci sa hýbali. Vlastne sa len potrebujeme vrátiť z funkcie on_mouse_down
a nechať hru rozhodnúť, kedy resetuje mimozemšťana ako súčasť jej bežnej práce počas
vykonávania vašich metód draw()
a update()
.
To je však nie je zložité vyriešiť s knižnicou Pygame Zero, pretože obsahuje zabudovanú triedu class:Clock, ktorá umožňuje naplánovať spúšťanie funkcií na neskôr.
Najprv „refaktorujme“ (to znamená reorganizujme) kód. Môžeme vytvoriť funkcie, ktoré nastavia mimozemšťana na zraneného a rovnako ho vrátia naspäť do normálu:
1 2 3 4 5 6 7 8 9 10 11 12 | def on_mouse_down(pos):
if alien.collidepoint(pos):
set_alien_hurt()
def set_alien_hurt():
alien.image = 'alien_hurt'
sounds.eep.play()
def set_alien_normal():
alien.image = 'alien'
|
Zatiaľ však k žiadnej zmene nedôjde, pretože funkcia set_alien_normal()
sa
nikde nevolá. Ale zmeňme funkciu set_alien_hurt()
tak, aby používala objekt
clock
, takže funkcia set_alien_normal()
sa bude volať o chvíľu neskôr.:
def set_alien_hurt():
alien.image = 'alien_hurt'
sounds.eep.play()
clock.schedule_unique(set_alien_normal, 0.5)
Metóda clock.schedule_unique()
spôsobí, že funkcia set_alien_normal()
sa zavolá po uplynutí 0.5
sekundy. Metóda clock.schedule_unique()
taktiež zabráni tomu, aby rovnaká funkcia bola naplánovaná viackrát, ako napríklad
keď budete klikať veľmi rýchlo.
Vyskúšajte to a uvidíte, že sa mimozemšťan vráti do normálu po uplynutí 0.5 sekundy. Skúste rýchlo klikať a overte, že sa mimozemšťan nevráti po 0.5 sekunde od posledného kliknutia. rapidly and verify that the alien doesn’t revert until 0.5 second after the last click.
clock.schedule_unique()
akceptuje pre zadanie časového intervalu ako celé
tak aj desatinné čísla. V tomto návode sme použili desatinné čísla, aby to bolo vidieť,
ale neváhajte použiť obe, aby ste videli rozdiel a dopad, ktorý majú rozličné hodnoty.
Zhrnutie¶
Ukázali sme si, ako nahrať a zobraziť sprity, prehrávať zvuky, ošetriť vstupné udalosti a ako sa používajú zabudované hodiny.
Môžete hru rozšíriť o skóre alebo môžete upraviť mimozemšťana tak, aby sa pohyboval viac náhodne.
Knižnica Pygame Zero obsahuje množstvo ďalších zabudovaných vlastností, ktoré robia prácu s ňou jednoduchou. Ak sa chcete naučiť aj zvyšné API, navštívte stránku o zabudovaných objektoch.