¢Metoda st@)d*n) obrazovek¢Radek ③t%rba, RASTER¢¢V mnoha programech pracuj)c)ch s grafikou m+(ete s v`hodou pou()t metody st@)d*n) obrazovek. O jakou metodu je jedn* a jak vlastn% funguje se V*m budu sna(it vysv%tlit v tomto 'l*nku.¢¢Iluze pohybu vznik* tak, (e nakreslen` objekt postupn% posunujeme po po(adovan[ dr*ze. V praxi se to nejjednodu&eji ud%l* tak, (e sma(eme objekt na star[ pozici a vykresl)me na nov[. Z*kladn)m probl[mem p@i jak[koli animaci je moment p@ekreslen) star[ pozice novou. Po')ta' toti( vykresluje obraz 50-kr*t za sekundu ╱podle moment*ln)ho obsahu videopam%ti$ a m+(e se st*t, (e ne( objekt na nov[ pozici sta')me vykreslit, dojde k zobrazen) cel[ obrazovky. Prakticky se to projev) tak, (e grafick` objekt jakoby "problikne". Nez*le() na tom, jak rychle dok*(eme objekt vykreslit - mus)me pouze n%jak`m zp+sobem zajistit, aby nedo&lo k vykreslen) obrazovky v okam(iku, kdy je pr*v% dan` objekt smazan` ╱p@ed t)m, ne( je um)st%n na sv[ nov[ m)sto$.¢¢Princip 1, ╱aneb VBI v&e vy@e&)$¢Pokud nen) grafick` objekt p@)li& velk`, m+(eme stihnout smazat objekt na star[m i vykreslit ho na nov[m m)st% b%hem VBI. A co se t)m vy@e&)?¢Rutina VBI prob)h* v okam(iku, kdy se paprsek, kter` vykresluje ka(dou 1/50 sekundy obrazovku, vrac) z prav[ho doln)ho rohu do lev[ho horn)ho. T)m je automaticky zaji&t%no, (e nedojde v okam(iku zpracov*v*n) t[to rutiny k vykreslov*n) obrazovky a tedy i k v`&e zmiovan[mu "probliknut)".¢Z+st*v* v&ak ot*zkou, jak velk` - pop@)pad% kolik men&)ch objekt+ sta')me b%hem jednoho VBI smazat na star[m a vykreslit na nov[m m)st%. Tady u( z*le() na "kvalit%" pou()van`ch rutin. ⇨)m lep&) ╱rychlej&)$ rutina, t)m v)ce toho stihneme. P@esto jsou i p@i pou(it) superrychl`ch rutin mo(nosti vyu(it) tohoto principu prudce omezeny. V (*dn[m p@)pad% to ale neznamen*, (e by nebyl pou(iteln`. Jen tak pro zaj)mavost - j* s*m tento zp+sob pou()v*m ve h@e Naturix pro vykreslov*n) v&ech pohybuj)c)ch se objekt+ v m)stnosti ╱krom% samotn[ postavy Naturixe$.¢¢Princip 2, ╱neviditeln* obrazovka$¢Z*kladn) my&lenkou t[to metody je prodlou(en) doby mezi vykreslov*n)m obrazovky. Douf*m, (e je V*m jasn[, (e monitor ╱obrazovka televizoru$ vykresluje obraz 50-kr*t za sekundu a (e po')ta' to nem+(e nijak ovlivnit. Zd*nliv% si tedy z*kladn) my&lenka proti@e') s t)mto faktem.¢Ale existuje mo(nost - pou()t "neviditelnou" obrazovku.¢Princip je jednoduch`: P@edstavte si, (e krom% obrazovky, na kterou se d)v*te existuje je&t% jedna, kterou vy nevid)te$. Potom sta') pou()t obvykl` zp+sob ╱tz. norm*ln% smazat objekt na star[m m)st% a vykreslit na nov[m$ s t)m rozd)lem, (e to provedeme na t[ schovan[ "neviditeln[" obrazovce. Teprve a( jsme se v&)m hotovi, p@ekresl)me cel` obraz z neviditeln[ obrazovky na tu viditelnou. Prakticky to znamen* zkop)rovat videopam%④ neviditeln[ obrazovky na videopam%④ viditeln[. Proto(e vid%t je jen viditeln* obrazovka, nem+(e doj)t k vykreslen) obrazovky v okam(iku, kdy na n) grafick` objekt nen). ¢Jedna pot)( ale st*le z+st*v*. Zkop)rov*n) videopam%ti cel[ obrazovky je 'asov% dost n*ro'n* operace. V BASICu je to ot*zka minut a ani strojov* rutina to nestihne za 'as men&) ne( 1/50 sekundy. Hroz) tedy i nyn), (e obrazovka bude vykreslena v okam(iku, kdy je&t% nen) cel* videopam%④ zkop)rov*na. Projevuje se to jak`msi vodorovn`m lomem, kter` se ob'as objevuje na pohybuj)c)m se objektu. Ve v%t&in% p@)pad+ je v&ak tento lom celkem nen*padn` a nep+sob) p@)li& ru&iv%.¢¢Princip 3, ╱ANTIC n*m pom+(e - st@)d*n) dvou obrazovek$¢D)ky skv%l`m koprocesor+m v po')ta')ch Atari lze princip 2 vylep&it a( k dokonalosti. Zobrazovac) 'ip ANTIC umo(uje zm%nit adresu, kter* bude pou(ita jako za'*tek videopam%ti p@i zobrazov*n). Tuto adresu m+(eme zm%nit okam(it% - jedn* se jen o p@eps*n) dvou byt+ v DisplayListu ╱DL$, tedy z hlediska 'asov[ n*ro'nosti o zanedbatelnou operaci.¢Tak(e princip: P@edstavte si dv% obrazovky ╱pro n*zornost si je ozna')me A a B$. Na A se d)v*me ╱tu vykresluje ANTIC$ a na B kresl)me ╱tu nevid) nikdo$. A( m*me na B vykreslenou novou pozici ╱tj. smaz*n objekt na star[m m)st% a vykreslen na nov[m$, zm%n)me za'*tek videopam%ti pro zobrazov*n) ╱v DL$ tak, aby ukazoval na obrazovku B. Adresu videopam%ti pro ur'en) kam se bude kreslit ╱tj. obsah adres 88 a 89$ nastav)me tak, aby ukazoval na obrazovku A. Nyn) tedy ANTIC ukazuje obrazovku B a my kresl)me na A. A( m*me v&e hotovo, p@epneme za'*tek videopam%ti pro zobrazov*n) ╱v DL$ zase na obrazovku A a za'*tek videopam%ti pro kreslen) ╱adresy 88 a 89$ na B. Tento postup st@)d*me po@*d dokola.¢V ka(d[m okam(iku tedy kresl)me na jinou obrazovku, ne( na kterou se d)v*me. Nem+(e proto doj)t k jak[mukoliv problik*v*n) 'i jin`m ru&iv`m efekt+m.¢Nesm)me v&ak zapomenout na to, (e za'*tek videopam%ti pro zobrazov*n) ╱v DL$ se skl*d* ze dvou byt+ ╱doln)ho a horn)ho$. Pokud m%n)me oba tyto byty, mus)me zajistit, aby ANTIC nep@e'etl DisplayList v okam(iku po zm%n% jednoho bytu a je&t% p@ed zm%nou druh[ho. T)m p*dem by do&lo k vykreslen) obrazovky dan[ &patn`m za'*tkem videopam%ti ╱kter` by neukazoval ani na A, ani na B$. To lze zajistit proveden)m zm%ny ve VBI. ¢Snaz&)m @e&en)m je zvolit za'*tky videopam%t) pro ob% obrazovky tak, aby byl jejich doln) byte stejn` - pak je v&e bez probl[m+. Obrazovky pak st@)d*me zm%nou pouh[ho 1 bytu!!!¢¢A je&t% n%co nav)c...¢M+(ete si do RAM um)stit je&t% t@et) obrazovku ╱ozna'me si ji t@eba C$, na kter[ budete m)t nakreslen[ pozad). Potom m+(ete m)t pohybuj)c) se objekty p@ed pozad)m n*sleduj)c)m zp+sobem:¢1.$ Nastav)te A jako viditelnou obrazovku, B pro kreslen).¢2.$ Obrazovku C p@ekop)rujete na B ╱na B je tedy pozad)$.¢3.$ Na B dokresl)te pohybuj)c) se objekty ╱te⇦ je na B v&echno$.¢4.$ Nastav)te B jako viditelnou obrazovku, A pro kreslen).¢5.$ Obrazovku C p@ekop)rujete na A ╱na A je tedy pozad)$.¢6.$ Na A dokresl)te pohybuj)c) se objekty ╱te⇦ je na A v&echno$.¢A po@*d dokola ╱bod 1 a( 6$...¢P@ekop)rov*v*n) obrazovky C na A ╱a na B$ V*m bude automaticky zaji&④ovat i smaz*v*n) dokreslovan`ch objekt+. ¢Pokud budete dokreslovat n%kolik men&)ch pohybuj)c)ch se objekt+, doporu'uji vylep&it algoritmus tak, (e budete z obrazovky C p@ekop)rov*vat jen bloky ╱obd[ln)ky$, kter[ jsou na m)stech dokreslovan`ch objekt+. Zbytek obrazovky A ╱resp. B$ toti( z+st*v* beze zm%ny, tak(e je zbyte'n[ ho st*le obnovovat. Je to pak sice o n%co komplikovan%j&) @e&en), ale uspo@en` 'as stoj) za to.¢¢Z*v%rem:¢Je pravda, (e pou(it) v)ce obrazovek je pam%④ov% n*ro'n[, ale jde o velmi efektivn) a hojn% pou()vanou metodu. Bez st@)d*n) obrazovek byste nepoznali (*dn` leteck` simul*tor ani hry se spoustou pohybuj)c)ch se grafick`ch objekt+. A nemyslete si, (e jde o metodu vhodnou jen pro 8-bitov[ Atari. Na vy&&)ch po')ta')ch se pou()v* v naprost[ v%t&in% her.¢¢