Nasledujúce ukážky animujú tak, že prekresľujú obrázky, z ktorých každý zobrazuje nejakú časť udalosti. Ak sa snímky prekresľujú rýchlo za sebou, tak sa nám zdá, že objekt sa pohybuje.
Vytvorenie animácií má dve časti:
|
- vytvorenie nadväzujúcich snímkov animácie
- napísanie kódu, ktorý obrázky zobrazí za sebou.
|
Najprv treba deklarovať pole triedy Image:
Image menoPolaObrazkov[];
|
|
Pri deklarácii poľa netreba zadávať počet jeho prvkov.
| |
Nahratie obrázkov sa robí v inicializácii appletu:
public void init()
|
for (int i = 0; i < 6; i++)
obrazok[i] = getImage (getCodeBase(), menoobr[i]);
|
|
Animácia sa vykoná tak, že sa vykreslí obrázok metódou paint (g), nejakú dobu sa počká ( sleep(200)), a môže sa znova vykresliť ďalší obrázok zo série.
Aby animácia pokračovala do nekonečna, tak po zobrazení posledného snímku je potrebné nastaviť počítadlo znova na prvý snímok.
Pozrite si zdroj predchádzajúcich appletov, ktoré sa líšia iba snímkami. Používajú thready.
|
|
Čo je THREAD?
Tieto applety využívajú thready - vlákna, toky.
Thread je tok prevádzania programu.
|
Aby pri prekresľovaní obrazovky program nečakal, tak sa spustí ďalšie vlákno behu programu.
Java dovoľuje programom, aby pomocou threadov vykonávali niekoľko rôznych programových krokov. Teda každý program je už sám osebe thread, pretože v ňom dochádza k jednej akcii.
Pri animácii sa thread využíva na to, aby počas čakania na zobrazenie ďalšieho snímku applet nestál. Preto sa vytvorí druhý thread - ďalší tok prevádzania programu.
V applete na použitie threadu uvedieme:
| thread mojevlakno = new thread();
Thread sa musí spustiť metódou start:
| mojevlakno.start(); |
|
Metóda start() vykoná metódu run()
threadu. Po spustení threadu sa metóda okamžite vracia
na začiatok, ale hlavný thread programu pokračuje.
Obrázky animácie sa prekresľujú práve v metóde run().
Zlepšenie výkonnosti animácie
|
|
Ako zlepšenie výkonnosti animácií v appletoch sa používa prekresľovanie iba nevyhnutnej časti okna. Napríklad, ak sa po obrazovke pohybuje malý obrázok, môžete použiť dve metódy:
- prekresliť celú plochu pozadia a potom nakresliť
obrázok na novej pozícii
- definovať časť plochy, ktorú je treba prekresliť, a
potrebné operácie urobiť iba s ňou.
Prvá metóda je neefektívna. Nasledujúce príklady ilustrujú použitie druhej metódy v applete.
Postup pri animácii:
- do pamäte vložíme plochu, ktorú treba prekresliť (obdĺžnik "staraPlocha")
- vypočítame nové súradnice polohy a otestujeme ich
- zapamätáme novú plochu, podľa nových súradníc
- určíme zjednotenie plôch - obnovenie (metóda union)
- prilepíme obnovenú plochu do obrázka (metóda clipRect)
|
Zobrazenie zdroja appletu AUTÍČKO:
|
|