Lovíme Minótaura (5. časť, zásah)
... pokračovanie z minulej lekcie
Streľbu už máme, teraz ešte zásahy. Strela by sa mala zaraziť o stenu. Pri náraze na stenu pridáme efekt výbuchu strely a na stene ponecháme spálený fliačik. Obsluhu nárazu do steny budeme dopĺňať do funkcie obsluha striel a výbuchov, pred podmienku dolet strely. Ak je na novej pozícii strely detekované nepriechodné políčko, je strela vypnutá.
Vyskúšajte. Strely by sa mali zarážať o stenu. Spoznáte to podľa sprievodné žiara na stenách, ktorá zmizne po náraze do steny.
Doplníme zvuk nárazu do steny. Podľa vzdialenosti miesta dopadu strely nastavíme hlasitosť zvuku. Použijeme ako rozlišovací kód zvuku index strely a tým zaistíme, že zvuky od rôznych striel budú na sebe nezávislé.
Opäť vyskúšajte. Zvuky pri náraze do steny by mali so vzdialenosťou dopadu slabnúť.
Teraz k výbuchom. Výbuchy striel budeme recyklovať podobne ako strely. Výbuchy budeme vytvárať vo funkcii vytvorení striel a výbuchov, hneď za skupinou vytvorenie strely. Bude to opäť 2D objekt s textúrou ktorú vidíte nižšie. Výbuch bude mať transparentnosť typu 11, teda typ "oheň". To znamená, že farba bodov sa bude pripočítať k farbe podkladu. 2D objekt volíme preto, aby bol výbuch vždy vidieť ako kruh a nie elipsa v prípade, že by sme sa pozerali na stenu šikmo. Aby sa nám výbuch nezobrazil odrezaný múrov, vypneme u neho hĺbkový test. To znamená, že grafické body budú ukladané vždy, aj keby ležal objekt za múrom. Hĺbkový test sa nastavuje pre celú renderovací skupinu, preto objekt zaradíme do inej skupiny než je implicitné 10 pre priehľadné objekty.
Pozn .: Renderovanie (vykresľovanie) 3D objektov v systéme Petr sa vykonáva postupne po renderovacích skupinách. Tým sa dá dosiahnuť špeciálnych efektov, kedy je potrebné určovať vzájomné poradie renderovanie objektov. Skupín je 16 a každý objekt môže patriť ku ktorejkoľvek zo skupín.
Späť na obsluhu striel a výbuchov. Za príkaz pre prehratie zvuku zásahu pridajte skupinu začatia výbuchu. Tu nastavíme súradnice výbuchu zhodne so súradnicami strely, vynulujeme čítač doby výbuchu a zapneme viditeľnosť výbuchu.
Ak by ste teraz program spustili, videli by ste po každom zásahu stene veľkú placku výbuchu. Nie že byto malo takto vyzerať, ale funguje to ako má. Sme ešte len vo vývoji.
Animáciu výbuchu obslúžime v rovnakej funkcii, hneď za obsluhou striel. Budeme na to potrebovať konštantu doba výbuchu, nastavte ju na 0.2. Ak je obsluhovaný výbuch aktívne (tj. Je viditeľný), zvýši sa čítač doby výbuchu. Použitím prevrátenej hodnoty doby výbuchu zaistíme, že čítač dosiahne za čas doby výbuchu hodnotu 1. (Pozn .: Ak uvedieme znak delenie s jedným operandom, znamená to převácenou hodnotu, ako by sme uviedli ešte operand 1.) Rotáciu podľa osi Z nastavíme na náhodný uhol - tým zabezpečíme animáciu výbuchu, aby nevyzeral ako statický objekt. Zmenou mierok X a Y zaistíme zväčšovanie výbuchu s časom.
Farbu výbuchu budeme s časom meniť tak, že ju budeme ztmavovať až k úplnej čierne. Vzhľadom k tomu, že výbuch sa vykresľuje operácií 11 (teda sčítanie farieb), prejaví sa stmavovanie tak, že výbuch bude s časom slábout a miznúť. Ak dosiahne čítač doby výbuchu hodnotu 1 (čo je po uplynutí zvoleného času), vypnutím viditeľnosti ukončíme animáciu výbuchu.
Vyskúšate Ak program, mali by výbuchy teraz už miznúť.
Ďalšie efekt, ktorého by sme chceli docieliť, sú spáleniny na stenách od striel. Dosiahneme ich tak, že na stene budeme lepiť obrázky spálenín. Ale len po určitú dobu, pretože ich nemáme neobmedzene. Budeme im v programe pracovni hovoriť zásahy.
Zo všetkého najskôr potrebujeme zoznam zásahov. Maximálny počet zásahov si zvolíme 50. V zozname budeme mať premenné ID zásahu a počítadlo doby zásahu.
Zásahy vytvoríme vo funkcii vytvorení zásahov, ktorú spustíme počas inicializácie programu. Obsahom funkcia je cyklus, ktorý zaistí vytvorenie všetkých objektov zásahov.
Zásahy budeme vytvárať ako štvorcové priehľadné objekty s textúrou viditeľnou nižšie. Vzhľadom k tomu, že potrebujeme, aby objekt pôvodné podklad ztmavoval a pritom aby sa s časom stmavovanie dalo zoslabovať, nemôžeme použiť jednoduchú operáciu stmavenie 20 (typu sklo). Použijeme transparentnosť 30, ktorá robí to, že cieľovú farbu moduluje (násobí) doplnkom zdrojovej farby. Vďaka tomu môžeme ztmavováním farby zásahu zabezpečiť to, že účinok stmavenie postupne slabne. Z toho dôvodu musíme použiť textúru zásahu inverzný.
Ak sa vyskytne viac zásahov na jednom mieste, môžeme pozorovať to, že prekryv zásahov je nestabilný. Je to z toho dôvodu, že vykresľovanie priehľadných objektov sa vykonáva s hĺbkovým triedením objektov. Pri tesnom prekrývania objektov je už rozlíšenie poradie vykresľovania neisté a rozlíšenie hĺbkového bufferu nestačí. Preto budeme zásahy renderovať bez ukladania hĺbkové informácie. To bude mať za následok, že ďalšie zásahy sa vykreslí vždy, bez ohľadu na to, či na danom mieste nejaký zásah už je vykreslený alebo nie je. Zásahy sa budú správať tak, akoby v danom mieste vôbec neboli. Podobne ako pri vytváraní výbuchov musíme pre toto nastavenie hĺbkového bufferu použiť samostatnú renderovací skupinu.
Aktiváciou zásahu zaistíme vo funkcii obsluha striel a výbuchov a to hneď za skupinou začatia výbuchu. Pripravte si konštantu odsadenie zásahu od steny, ktorú v inicializácii nastavte na 0.01.
Na začiatku začatí zásahu musíme vyhľadať voľný zásah, tj. Zásah s vypnutou viditeľnosťou. Ak nie je nájdený žiadny voľný zásah (streľba je príliš rýchla alebo nemáme obslúžených miznutie zásahov), použije sa najstarší z nich. Využíva sa pritom toho, že zoznam prechádza len funkcie pre obsluhu zásahov a tá ponecháva index zásahu bezo zmeny. Zásah umiestnime na rovnakú súradnicu ako strela, otočíme ho podľa cieľovej steny, inicializujeme čítač doby zásahu na 1 a zapneme viditeľnosť zásahu.
Obsluha rotácie zásahu je trochu komplikovaná, možno až krkolomná. Využívame v nej toho, že priechodom strely stenou sa zmenila celočíselná časť niektoré jej súradnice.
Ak sa zvýšila celočíselná časť súradnice Z, strela preletela múrov smerom nahor (pri pohľade na mapu bludiska zhora). Preto zásah otočíme smerom nadol, tj. Rotácia Y bude 0. Súčasne opravíme súradnicu Z tak, aby zásah ležal kúsok pred múrom.
Ak sa celočíselná časť súradnice Z zmenšila, preletela strela múrov smerom nadol, teda opačne ako predošlý prípad. Pri teste novej súradnice počítame s tým, že môže mať zápornú hodnotu a preto vykonávame korekciu pripočítaním a odčítaním 1.
Ak sa celočíselná časť súradnice Z nezmenila, bude sa jednať o ľavú alebo pravú stenu, preto ju podobne rozlíšime testom súradnice X. Opäť okrem otočenie dokorigujeme aj presnú súradnici X.
Vyskúšaním programu overte, či sa po zásahu steny objavujú spáleniny a to na stenách vo všetkých 4 smeroch. Zatiaľ spáleniny nemizne samé, ale mali by miznúť ak prekročíte ich maximálny počet 50.
Nakoniec obslúžime miznutie zásahu. Pripravte si číselnú konštantu doba miznutie zásahu. Nastavením na hodnotu 15 určíme, že zásah zmizne za 15 sekúnd. Obsluhu zaistíme funkcií obsluha zásahov. Vložte jej volanie do hlavnej slučky programu.
V obsluhu zásahov budeme prechádzať zoznam všetkých zásahov a hľadať zásahy, ktoré sú aktívne (tj. Viditeľné). Index zásahu nenastavuje na predvolenú hodnotu, aby po skončení funkcie jeho hodnota zostala rovnaká ako pred vstupom do funkcie.
Nájdeme Ak je aktívny (viditeľný) záznam, znížime čítač doby zásahu o končiaci k uvedenému dátumu čas. Použitím prevrátenej hodnoty doby miznutie zásahu zaistíme, že čítač prejde z hodnotu 1 na 0 za zvolenú dobu. Podľa hodnoty čítača nastavíme farbu zásahu. Pretože čítač klesá od 1 k 0, bude aj jas objektu klesať od bielej k čiernej. Vzhľadom k použitému typu transparentnosti bude obraz zásahu postupne miznúť. Ak dosiahne čítač nuly, zásah vypneme.
Streľbu do steny opäť vyskúšajte. Zásahy by tentoraz mali po nejakej dobe samy miznúť.
.... dokončenie nabudúce
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 192x (1005.49 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Petr Lite (sú obsiahnuté v EXE súbore, ktorý možno v programe priamo otvoriť)