neděle 6. června 2004

AnimAce - díl první: Jáchyme hoď ho do stroje!

autor: George K.

Vážení uživatelé Specter a Didaktiků, vítám vás u prvního dílu seriálu o počítačové animaci. Dlouho jsem přemýšlel, jak ho co nejlépe začít (třeba několikastránkovým pojednáním o nedostatku místa pro rozvinutí všech skvělých myšlenek), ale nakonec jsem se rozhodl úvod zcela vynechat a hned od počátku vás nemilosrdně zatěžovat cennými, méněcennými i úplně bezcenými informacemi.
Dost bylo úvodocentrismu, vzhůru vstříc novým zážitkům...!

Tvorba a uložení grafických dat

1.1 Jak si to udělat

Grafická data si pro snažší orientaci rozdělíme do dvou skupin: pozadí (nevykazuje známky života) a zbytek (tj. postavičky, příšerky... prostě všechno, co se hýbe). Chceme-li animovat, je základním předpokladem mít co. Můžete si tedy vzít milimetrový papír a něco hezkého si nakreslit; no a pro ty, kterým se zrovna nechce jsem připravil jednoho ostrého hocha, co se jmenuje Joe; dobře si ho prohlédněte a buďte na něj hodní, protože vás bude pronásledovat v celém seriálu. Úkolem číslo jedna je dostat Joa na obrazovku. Doporučuji nahrát si Art Studio, protože je ze všech grafických programů tím nejpohodlnějším. V menu Misc. (Jiné) nastavte bright 1 (rastr 1), v menu Attrs. (Barvy) transparent (průhledné). Použijte Magnify (Lupu) 4x a obkreslete Joa do horního levého rohu obrazovky. Bude vám na to stačit přesně obdélník o rozměrech 2 x 4 znaky, jak je patrné z obrázku. Až budete s kreslením hotovi, definujte si okno (Windows / Okno - Define window / Definuj okno) a to tak, aby obsahovala celého Joa (tj. 2 x 4). Pak v menu Text skočte do font editou (poslední položka). Jako aktuální znak (ukazuje na něj rámeček) mějte vykřičník a ne mezeru, předejdete tak pozdějším překvapivým efektům. Funkcí capture font (kopíruj okno) v menu Misc. (Jiné) překopírujte figurky do znakové sady.
Pokud jste provedli vše tak, jak je popsáno, můžete uložit obrázek i znakovou sadu na pásku nebo na disk, Art Studio vymazat a přečíst si, co dál...
(Poznámka: Vzhledem k vysokému počtu různě počeštěných verzí Art Studia nemohu ručit za to, že se vaše kopie shoduje s mou, řiďte se proto, prosím, anglickými názvy funkcí.)

1.2 Zpracování nahromaděných dat

1.2.1 UDG - uživatelem definovaná grafika
Teď bude nutné převést vytvořená data do nějaké užitečné podoby. Jistě víte, že Spectrum má v cosi jako předefinovatelné grafické znaky - na první pohled vymoženost, ale v podstatě v podstatě málo využitelná. Nadefinování grafického znaku sice najdete v manuálu, ale myslím, že vůbec nebude na škodu si to připomenout. Zkuste:
10 RESTORE 40: READ a$
  20 FOR a=0 TO 7: READ n: POKE USR a$+a,n: NEXT a
  30 PRINT AT 0,0; CHR$(144),CODE SCREEN$(0,0);
  40 DATA "A", BIN 111100, BIN 1111111, BIN 1111100, BIN 11110010
  50 DATA BIN 1000011, BIN 1000000, BIN 111100, 0
Pokud jste se nikde nespletli, měla by se vytisknout Joeova hlava a nula.
Nevýhodou UDG je malý počet počet předefinovatelných znaků (21) a hlavně to, že nelze využít další vymoženosti Basicu, a sice funkci SCREEN$. Napište PRINT AT 0,0;"A" CODE SCREEN$(0,0) a hle, je tu 65! Jak jste viděli, SCREEN$ se dá použít pro zjištění znaku na zadaných souřadnicích. Bohužel, pro UDG to nefunguje, ale jak to výhodně udat jinde si ukážeme v příštím dílu.
1.2.2 Znaková sada nemusí vždy obsahovat jen písmena...
... jak se přesvědčíte za chvíli. Vyťukejte na klávesnici
10 CLEAR 49999: LET adr=5000
  20 LOAD "" CODE adr: REM pro disk: LOAD *"JménoSady"CODE adr
  30 POKE 23607, INT (adr/256)-1
  40 POKE 23606,adr-256* INT (adr/256)
spusťte a nahrajte znakovou sadu, vytvořenou v článku 1.1. Na první pohled se nic nestalo, ale co takhle zkusit napsat vykřičník, uvozovku, hash (#), string ($), procento...? Aby bylo dílo dokonáno, bude nejlepší vrátit na adresy 23606 a 23607 hodnoty 0 a 60 (zadejte POKE 23606,0: POKE 23607,60 a Enter), vymazat řádek č. 20 a doplnit následující
50 LET x=10: LET y=10
  60 PRINT AT x,y;"!""""; AT x+1,y;"%&"
  90 POKE 23606,0: POKE 23607,60 
Program vytiskne na souřadnici X,Y první fázi Joa. Připíšeme-li ještě řádek
70 PRINT AT 20,0; CODE SCREEN$(x,y)
zjistíme, že ASCII kód znaku je 33 a to je skutečně vykřičník! K čemu je to použitelné? To se dozvíte v dílu č. 2.
Ještě bych dodal, že druhá Joeova pozice je ukryta ve znacích #$'( a vytisknete ji stejně jako tu první. Předefinováním celé znakové sady získáme něco přes devadesát nových znaků a to by mohlo stačit pro nenáročnou Basicovou hru...
1.2.3 Co s tou obrazovkou?
Nechat ji uležet na pozdější dobu. Bude se hodit, až budeme hovořit o sprajtech a jejich animaci... to si ještě užijeme, brrr!

1.3 Zapomělo se na pozadí!

Předpokládám, že budete chtít využít všech v budoucnu nabytých znalostí pro tvorbu nějaké pěkné hry, co já si pak za drahé peníze koupím, a proto se neobejdete bez jakéhosi pozadí, které bude dokreslovat celkovou atmosféru.
Pozadí je věc ošemetná a jsou s ním vždy problémy - aby ten chlapík nechodil tři znaky nad zemí, aby ty ryby neplavaly ven z akvária, aby se to všechno vešlo do paměti, jak to udělat s barvami, a jak zajistit, aby se po průjezdu autíčka nemazala ulice...
Tenhle problém se nedá řešit obecně, ale je pro každou hru individuální. Vyrábíte-li něco na zůsob SPACE RAIDERS, stačí si nakreslit pár hvězd, obrázek spakovat nějakým presorem (Mr. Pack, Pressor, Pack Maker) a je po starostech. Při jakékoliv jiné hře to bude nejméně 5 x až 50 x složitější.
Existuje několik způsobů, jak pozadí uchovat. Kupříkladu můžete zase předefinovat znakovou sadu, to je ovšem u lepší hry nepoužitelné. Pak je tu možnost ukládat do paměti kusy obrázků a z nich skládat výsledek - to se používá nejčastěji, bohužel to nejde v Basicu. Co se týká grafiky vektorové, tam se pozadí navíc drze pohybuje a je v paměti schováno jako halda čísel, udávajících prostorové souřadnice. S rolující ulicí to také není nejjednoduší - autoři většinou kombinují několik způsobů uložení dohromady.
1.3.1 Jednoduché pozadí - také pozadí
Poprosím vás teď, abyste si opět nahráli Art Studio, protože přišla ta pravá chvíle přestat kecat a začít něco dělat. Nahrajte si také tu znakovou sadu (1.1) a předefinujte další znaky tak, aby )*-. byl Joe snožmo vlevo, +,/0 roznožmo vlevo a 1 vypadala jako grafický znak pod číslicí 3 na klávesnici. Také se bude hodit, když namísto 2 vytvoříte pěkné X, které bude mít nožičky z rohu do rohu. A abych nezapomněl, z 3 udělejte dva proužky směřující zezhora dolu a ze 4 šachovnici. (Nejsem si teď jist, že jsem vysvětlil to předefinování jasně, proto raději uvádím obrázek, jak Joe vypadá po otočení vlevo.) I když to v žádném případě nevypadá, ze čtyř znaků se přece jen dá složit jednoduché pozadí - do složitějšího se ani pouštět nebudeme, v Basicu by to stejně nemělo smysl.
A to je pro dnešek vše.
Tak málo nám příště bude stačit, abychom si udělali úplně jednoduchoučkou stupidní hru.
(pokračování příště)

Žádné komentáře:

Okomentovat