Fred - First steps
Ciele
- Osvojiť si základy práce s vývojovým prostredím NetBeans (práca s projektom, nastavenie vlastností projektu, tvorba tried).
- Naučiť sa implementovať rozhrania pomocou predpísaných rozhraní vo vlastných triedach.
Úvod
Pre úspešné zvládnutie tohto modulu odporúčame pred jeho začatím prejsť návodom
Slick Basic Game,
ktorý je dostupný na Slick Wiki.
Postup
-
V prvom kroku vykonáte niekoľko prípravných úloh pre svoj nový projekt: prevezmete kostru projektu z internetu, pokúsite sa odstrániť prípadné problémy v prípade, že sa nebude dať korektne spustiť a naučíte sa pracovať s ovládaním vstupu.Úloha: Z tejto linky si stiahnite, rozbaľte a otvorte kostru projektu vašej budúcej hry.Projekt už v sebe obsahuje aj knižnicu Slick2D. Projekt si môžete samozrejme vytvoriť sami, ale nezabudnite do neho túto knižnicu umiestniť (v nastaveniach projektu pridajte stiahnutú knižnicu (jar súbor) do zoznamu knižníc, s ktorými bude váš projekt pracovať).Úloha: Vytvorte triedu Game, ktorá bude rozširovať triedu BasicGame.Úloha: V metóde main() projektu inicializujte svoju hru.Hru inicializujte napr. týmto fragmentom kódu:
AppGameContainer app = new AppGameContainer(new Game()); app.setDisplayMode(640, 480, false); app.start();Úloha: Otestujte správnosť svojej implementácie.Pokiaľ ste postupovali správne, zobrazí sa vám prázdne čierne okno s rozmermi 640x480 a s počtom FPS na obrazovke. Okno je v tomto momente možné vypnúť len jeho zatvorením.Úloha: Zabezpečte, aby sa aplikácia ukončila stlačrením klávesy Esc. -
V tomto kroku vytvoríte triedu, ktorá bude reprezentovať hlavnú postavu - Freda. Fred bude charakterizovaný svojou pozíciou a taktiež množinou obrázkov, ktoré budú reprezentovať jednotlivé fázy Fredovho pohybu. Naučíte taktiež Freda reagovať na stlačené klávesy, pomocou ktorých budete môcť Freda ovládať na obe strany - vpravo aj vľavo.Úloha: Vytvorte novú triedu Fred, ktorá bude reprezentovať Freda.O Fredovi (hráčovi) bude platiť nasledovné:
- Fred bude graficky reprezentovaný (zatiaľ jedným) obrázkom, a
- bude sa nachádzať niekde na plátne (pozícia x a y)
Poznámka: Na reprezentáciu Fredovho obrázku použite triedu Image z balíčka org.newdawn.slick. Pozor však, nakoľko trieda Image sa nachádza aj v balíčku java.awt.Sprity animovaných obrázkov jednotlivých objektov nachádzajúcich sa v hre nájdete v priečinku resources/animation_images. Pre reprezentáciu Freda v tomto prípade použite obrázok resources/animation_images/fred/walk_left1.png.Úloha: V triede Fred vytvorte metódu render(), ktorá vykreslí Freda na obrazovku na základe jeho pozície.Úloha: V metóde init() triedy Game vytvorte inštanciu triedy Fred a zabezpečte jeho vykreslenie na obrazovku pomocou metódy render().Úloha: Otestujte správnosť svojej implementácie.Ak ste postupovali pri implementácii správne, na obrazovke sa zobrazí Fred.Úloha: V triede Fred vytvorte metódu void moveX(int delta), ktorá umožní pohybovať sa Fredovi po x-ovej osi.Metóda bude mať 1 parameter delta, ktorý- ak bude kladný, Fred sa o hodnotu parametru posunie vpravo, ináč
- ak bude záporný, Fred sa o hodnotu parametru posunie vľavo.
Úloha: Zabezpečte, aby bola metóda moveX() volaná pri každej aktualizácii hernej logiky (volaní metódy update()).Úloha: Otestujte správnosť svojej implementácie.Pokiaľ ste postupovali správne, na obrazovke sa vám zobrazí Fred a podľa nastavenej hodnoty parametra delta metódy moveX() sa bude jeho obrázok presúvať buď doprava alebo doľava. -
V predchádzajúcom kroku sa obrázok Freda pohyboval postupne z jedného okraja obrazovky na druhú. Na konci tohto kroku bude Fredov pohyb animovaný. Fred bude taktiež reagovať na stláčanie klávesov, pomocou ktorých bude hráč vedieť meniť Fredov smer vľavo a vpravo.Úloha: Naučte Freda reagovať na stlačenie kláves vľavo a vpravo, čím dôjde k zmene smeru jeho pohybu.Pri stlačení klávesu vľavo, nastavte parameter delta metódy move() na hodnotu -1. Pri stlačení klávesu vpravo zasa nastavte tento parameter na hodnotu +1.Úloha: Vytvorte členskú premennú triedy Fred s názvom leftAnimation, ktorá bude predstavovať fázy Fredovej animácie smerom vľavo.Na reprezentáciu animácie využite triedu Animation a jej konštruktor Animation(Image[] frames, int duration, boolean autoUpdate), kde význam jednotlivých parametrov je nasledovný:
- frames - The images for the animation frames.
- duration - The duration to show each frame.
- autoUpdate - True if this animation should automatically update. This means that the current frame will be caculated based on the time between renders.
Úloha: Vykreslite Fredov pohyb pomocou vytvorenej animácie a overte tak svoju implementáciu.Úloha: Zabezpečte, aby sa Fred pohyboval len pri držaní smerových kláves.Fred sa bude pohybovať vľavo a vpravo len vtedy, ak budú stlačené smerové klávesy vľavo alebo vpravo. Po ich uvolnení sa zastaví, pričom sa prestane prehrávať aj jeho animácia a obrázok sa nastaví na prvý obrázok z postupnosti animácie. Fred teda nemôže stáť "vykračujúci".Úloha: Podobným spôsobom vytvorte členskú premennú rightAnimation a zabezpečte, aby sa používala výlučne pri pohybe Freda vpravo.Keďže nemáte k dispozícii samostatné obrázky reprezentujúce Fredov pohyb vpravo, musíte aj túto animáciu vyskladať z obrázkov Fredovho pohybu vľavo. Na transformáciu obrázkov pritom použite vhodné metódy z triedy Image. -
Vymažte projekt z disku a zrušte všetky vami vytvorené nastavenia v
prostredí BlueJ a NetBeans!
Doplňujúce úlohy
- Vytvorte si pomocnú statickú metódu (napr. v novej vlastnej triede Helper), ktorá vám umožní automaticky načítať všetky obrázky danej animácie na základe ich "vzoru". Pri vytváraní animácie teda nemusíte vymenovať zoznam všetkých obrázkov, z ktorých animácia pozostáva, ale použijete len základ jej názvu a počet obrázkov, z ktorých sa animácia skladá. Deklarácia tejto metódy môže vyzerať nasledovne: Animation getAnimationFromPattern(String pattern, int frames, int duration).
Ďalšie zdroje
- Domovská stránka softvérového rámca Slick2D
- Slick2D Tutorials
- JavaDoc knižnice Slick2D
- Prehľad všetkých klávesov a ich kódov
- Rudolf Pečinovský: Rozhrania
- Rudolf Pečinovský: Balíčky
- Návod na tvorbu animácií v knižnici Slick2D.
$Id$
