Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

3. diel - Programujeme Android hru - Základné vstavané triedy

Servus,

v minulom diele som sľúbil, že dnešný diel nebude tak vyčerpávajúce a hlavne, že to už konečne bude o nejakom tom programovania.

Dneska si ukážeme nejaké základné vstavané metódy a triedy v Libgdx, pohráme si trošku s farbami, povieme si niečo o obrazovke a vypíšeme na ňu text.

Spustíme si Eclipse s naším "troch-projektom" ...

Otvoríme časť projektu desktop - Programujeme Android hru

A rozkliknite si zložku desktop a do triedy DesktopLauncher­.java si pridáme tri riadky s pomenovaním názvu a nastavením veľkosti okna, v ktorom naše aplikácie na počítači pobeží.

Pomenujeme okno a udelíme mu veľkosť - Programujeme Android hru

Keď po týchto úpravách našej aplikácii spustíme, tak vidíme že má náš nastavený názov okna a zodpovedajúcu šírku a výšku, ktorú sme nastavili v pomere 800 px / 500 px = 1,6.

Objavil sa názov okna a nastavila sa veľkosť - Programujeme Android hru

Zložku desktop a triedu DesktopLauncher­.java môžeme nateraz uzavrieť a opustiť. Rozkliknite si zložku core a otvoríme si triedu WackyChicken.java, mala by vyzerať nejako takto:

Otvoríme si triedu WackyChicken.java - Programujeme Android hru

Vykonáme nejaké úpravy spočívajúce v tom, že odstránime premenné batch, img. V metóde create () odstránime všetko (obaja dva riadky). V metóde render () ponecháme iba riadky Gdx.gl.glClearColor (0, 0, 0, 1) a Gdx.gl.glClear (GL20.GL_COLOR_BUF­FER_BIT), pričom tí bystrí si všimli, že som tu prvý jedničku zmenil na nulu. Môžeme stlačiť klávesovú skratku ctrl + shift + O, aby nám po odstránení premenných zmizli nepotrebné importy - zatiaľ toto nie je dôležité, vrátim sa k tomu neskôr, keď to teraz neurobíme Eclipse len hodí warning hlášku.

Odstránime pre nás zatiaľ nepoznáme premenné - Programujeme Android hru

Kto teraz skúsil po tejto zmene projekt spustiť (spustil zložku desktop), vidí, že zmizol obrázok a hlavne, že pozadie je celé čierne, takže určite pochopil, že to má na svedomí práve tá zmena prvého čísla jednotky na nulu. Požadovanú farbu pozadia si môžeme namiešať pomocou prvých troch čísel, pretože tieto čísla predstavujú jednotlivé zložky RGB, pričom sú typu float (desatinného čísla) a môžu naberať hodnôt od nuly do jednej. Štvrté číslo vyjadruje priehľadnosť. Skúste napríklad nastaviť prvé tri čísla na 1, 0.55f, 0.12fa mali by ste dostať takú nejakú oranžovú.

Pre naše účely si to zatiaľ ponecháme čiernej a vyskúšame si základné metódu, ktorá nám vypíše reťazec do konzoly. Metóda si berie parametre vo forme dvoch textových reťazcov, pričom prvý reťazec je len názov správy, ktorú chceme zobraziť (tzv. Tag). Druhý string je text, ktorý chceme vypísať, pridajme si teda do funkcie create () metódu Gdx.app.log ( "Pozdrav", "ahoj") a spustí desktop.

Pridajme metódu Gdx.app.log - Programujeme Android hru

Vidíme, že metóda robí to, čo chceme - dole v Consoli sa nám zobrazila naša správa. To sa nám môže hodiť, keď si napríklad chceme zistiť obsah nejaké premenné, chceme ho poznať len my ako vývojári a nechceme tým obťažovať užívateľa našej aplikácie. Sám som si toto pomenoval "vypísať si servisné údaje".

Ďalšími základnými dôležitými metódami sú Gdx.graphics.get­Width () a Gdx.graphics.get­Height (), neberú si žiadne parametre a vracia celé čísla (int) šírku a výšku obrazovky. Zase pridáme do funkcie create () a vyskúšame spustením desktopu:

Pridáme metódy getWidth a getHeight - Programujeme Android hru

Opäť nám krásne funguje - dostali sme hodnoty šírky 800 a výšky 500 a to je správne - sú to tie hodnoty, ktoré sme pred chvíľou nastavili do časti projektu desktop konkrétne do triedy DesktopLauncher­.java ako nastavenie veľkosti okna, v ktorom naša aplikácia beží.

Predstavme si na chvíľu, že toto okno je akési "virtuálne zariadenia", na ktorom naše appky beží. Schválne dávam do úvodzoviek, pretože je to samozrejme v podstate len Java aplikácie. Mám na mysli virtuálne zariadenia len z pohľadu veľkosti okna, veľkosť 800x500 teraz môžeme brať ako takú konštantu - proste máme k dispozícii iba tento obrazovkový priestor, viac nič a musíme sa s tým nejako vysporiadať.

Ide mi o to, načrtnúť vám problematiku rôznych displejov na rozličných Androidom mobiloch a tabletoch. Naša hra si musí vedieť poradiť, keď veľkosť zmeníme napríklad na 1920x1080 alebo 1024x768, hovorí sa tomu virtualizácie obrazovky. Už asi tušíte, že budeme postupovať tak, že najskôr metódami getWidth () a getHeight () zistíme skutočné fyzické rozmery veľkosti obrazovky mobilu / tabletu a potom podľa týchto zistených rozmerov obrazovky nastavíme našu virtuálne obrazovku. Alebo inak povedané zmenšíme alebo zväčšíme našej grafiku použitú v našej hre.

Poďme ďalej, výpisy si nejaký text nie do Console ale priamo na obrazovku. Stále sme v priečinku core a v triede WackyChicken.java, aby sme mohli niečo vypísať či vykresliť na obrazovku, budeme k tomu potrebovať nejaké objekty. Na začiatok triedy deklarujeme jej premenné:

private BitmapFont font;
private SpriteBatch batcher;
private String ourText;

Nezabudnime stlačiť klávesovú skratku ctrl + shift + O pre pridanie importov, inak by nám Eclipse hádzalo chybovú hlášku, že tieto triedy nepozná. Už z názvu dokážete určite určiť, čo triedy robia, BitmapFont obsahuje písmo, SpriteBatch batch-dávku. Trieda sa stará o vykreslenie jedného (alebo viac-dávky) nejakého obdĺžnikového grafického elementu no a String je obyčajný reťazec - v našom prípade text, ktorý chceme vypísať na obrazovku.

Vo funkcii create () tieto premenné "naplníme" konkrétnym textom a konkrétnymi objekty:

ourText = "Toto je nas prvni text, ktery vypiseme na obrazovku.";
font = new BitmapFont();
batcher = new SpriteBatch();

Naplníme som dal úmyselne do úvodzoviek - seminár je určený aj pre začiatočníkov, tak sa tu nad tým pozastavím, pokročilí preskočí. Čo viem o Jave, tak keď napíšeme kľúčové slovo new, tak sa nám v tzv. Hromade (časť pamäte) vytvorí nejaký konkrétny objekt, avšak do našich konkrétnych premenných font a batcher sa tieto objekty neuloží, uloží sa do nich len pamäťové adresy týchto objektov , ktoré sa v skutočnosti nachádza v časti pamäti zvaná hromada.

Nenechajte sa týmto odradiť, pre našej tvorbu toto nie je moc podstatné, vyplynie to z poznatkov ďalej a môžete si prečítať základy Javy v online učebnici, na ktorú som odkazoval v prvom diele.

Do funkcie render () pridáme:

batcher.begin();
batcher.setColor(1, 1, 1, 1);
font.draw(batcher, "string" ,0,450);
batcher.end();

Riadky opäť hovoria samy za seba - čokoľvek chcete po triede SpriteBatcher vykresliť na obrazovku, musíte vložiť medzi metódy begin () a end (). Keď to neurobíte, appky vám pravdepodobne bude padať. Metódu setColor taky nemusím už zmieňovať - je to rovnaký RGB princíp, ako sme robili u pozadia. Metóda draw () odovzdá našu premennú obsahujúci textový reťazec triede SpriteBatcher konkrétnemu nášmu objektu batcher a ten ju vykreslí na obrazovku. Čísla 0 a 450 sú súradnice začiatku, odkiaľ sa má začať vykresľovať. Celý náš dnešný kód by mal vyzerať nejako takto:

Celý dnešný kód triedy WackyChicken.java - Programujeme Android hru

Uložte si a skúsme spustiť desktop ...

Úspešne sme vypísali text na obrazovku - Programujeme Android hru

Vidíme, že to funguje a to tiež bude pre dnešok všetko. Nabudúce na dnešok nadviažeme. Kompletný zdrojový kód je priložený k stiahnutiu.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 21x (622.88 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java

 

Predchádzajúci článok
Programujeme Android hru - Stiahnutie potrebného software
Všetky články v sekcii
Programujeme Android hru
Preskočiť článok
(neodporúčame)
Programujeme Android hru - Render, delta a FPS
Článok pre vás napísal Jaroslav Polívka
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje převážně jazykům JAVA a C++
Aktivity