Navigátorposledních 10 z diskuze |
Sprity, Sprity , Sprity ...Co dělá Commodore 64 Commodorem (64) ? .... Sprity, slovensky škriatek. Sprity jsou dominana C64 absolutně nezpochybnitelná. Sprit je část paměti o velikosti 24 x 21 bitů, která je graficky nezávislá od ostatního grafického režimu počítače. Jednoduše řečeno, je rpti "stát ve státě". Můžeme jej nezávisle obravovat do jedné barvy + pozadí (hires), můžeme jej obarvovat do tří barev + pozadí (multicolor), můžeme s nimi nezávisle manipulovat po obrazovce, animovat, prostě cokoliv. Hires sprit má tedy velikost 24 * 21 bitů, což znamená , že zabírá v paměti místo 4*21 bajtů ( 64 znaků). Chceme-li editovat sprit, musíme použít nějaký editor spritů , protože organizace spritu v paměti není vhodná pro přímě vepisování hodnot. K editaci spritu také můžeme použít vestavěný monitor Final Cartridge III ( nebo Action Replay) . V FCIII najdeme výpis spritů pod příkazem ES adresa adresa. Sprity se mohou ve standartně zaplém banku paměti nacházet od adres $2000 - $4000 s tím, že sprit vždy musí začínat na násobku hodnoty 64 ($40). To znamená, že sprit může být v paměti nakreslen od adresy $2000 , $2040, $2080, $20c0 , $2100 ... atd. Zobrazujem, ukazujem, nastavujem ...Sprity jako takové jsou standartně vypnuty. Zapínají se na adrese $D015. Osm bitů této adresy je osm spritů zobrazitelných na obrazovce. Takže následujíví příklad nám zapne první, pátý a šestý sprit. Nejjednodušší je používat možnost binární editaci hodnot, protože pak máme vše jako na talíři. lda #%00110001 Tímto docílíme, že se sprit zapne a bude viditelný. Ovšem ještě pořád počítač neví, jaké sprity z jaké části paměti zobrazit. Tyto ukazatele na jednotlivé sprity se nachází na adresách $07f8 - $07ff. Adresa $07f8 je první sprit, $07f9 druhý atd... Hodnotu pro ukazatel vypočítáme takto: lda #$c0 Tímto máme nastaven ukazatel spritu na místo od $3000 Pozicujem a divíme se ... a pozicujeme přes hodnotu 255(x)Každý sprit má dvě adresy. Jednu pro X souřadnici a druhou pro Y souřadnici. Od adresy $D000 začínají adresy pro pozici spritů následovně.
Následující příklad umístní sprit na souřadnice X=100 a Y=217 lda #100 Zde ale nastává jedna zásadní otázka. A to ... Commodore 64 má přeci v X-ové souřadnici bodů 320 !! ... Jak udělat , aby jsme mohli nastavit sprit za hodnotu 255 ??? problém při používání pohybu přes 255 hodnotu je , že musíme kontrolovat Xsouřadnici 2x. Jednou, když přejíždíme spritem přes 255 a podruhé, když zapneme přetečení na adrese D010. To musíme hlídat pohyb za rám obrazovky. Zvětšujeme, zmenšujeme , a tak dáleSprit můžeme také jednoduše horizontálně nebo vertikálně dvojnásobně zvětšit. To se děje na adresách $D017 - svislé zvětšení a $D01D - vodorovné zvětšení. Opět nastavním příslušného bitu pro daný sprit tento zvětšíme či opět vrátíme na původní hodnoty. Takto zvětšený sprit zvětší pouze zobrazenou velikost. Tudíž všechny body se zvětší, ale velikost v paměti zůstane stejná. Priority zobrazeníDalší věc,kterou VIC se sprity umí je nastavení priority zobrazení spritu před nebo za znaky. Adresa $D01B je adresa priority. Tímto docílíte toho,že můžete mít sprit schovaný za znaky nebo před znaky. (více popisu je nejen zbytečnost, ale i pitomost :) Barvišššky miláášššek ...Tak jako grafika i sprity mohou mít multicolor mód. A tak jako u grafiky i u spritů se jejich rozlišení zmenší v X-ové ose dvakrát. To znamená, že sprit má poté velikost 12 x 21 bodů. Multicolor mód u spritů se zapíná na adrese $D01C. Po zapnutí opět příslušným bitem můžeme nastavit barvy multicoloru na adresách $D025 a $D026. Zde jsem se ještě zapoměl zmínit o klasickém obarvení spritů. A to se děje na adresách $D027 - $D02E. lda #1 Kolize sprit / sprit ... sprit / znakCo dělá hru hrou ??? Kolize. Kolize raketky letící mezi sprity , mezi znaky .. A na tyto kolize jsou opět dvě adresy . Na adrese $D01E je kontrolována kolize sprit / sprit a na adrese $D01F kolize sprit / znak. Jestliže nastane kolize spritů , na adrese D01E jde tento stav přečíst. Jako obvykle můžeme binárně zjistit, které sprity kolidují. Ovšem koliduje-li sprit se znakem, adresa D01F nám pouze vrací hodnotu 0 = není kolize a 1 = nastala kolize. Nemůžeme proto tak snadno zjistit , který znak nám zrovna koliduje se spritem. Na zjištění kolize se znakem musíme použít nějakou svoji metodu. Například zjištění souřadnice spritu a podle toho přepočítat na matici obrazovky místo, kde se nacházíme a pod ním kód znaku. I přes toto omezení ale patří práce se sprity s tím nejjednodušším. Tímto jsme završili všechny možnosti použití spritů na Commodore 64. Sprity jsou úžasné svoji nezávislostí na grafickém módu . Můžou být použity jak v textovém, tak v grafickém režimu úplně stejně. Na multicolor grafiku můžeme umístnit hires sprit a naopak. |
Poslední recenzereakce na článkyTOP 10 HRY
|