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
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, 0Pokud 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ávesnici10 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,60Program 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
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