Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Game Development
  2. Programming

Kódování Pixel zničitelné terénu: Jak se dělá všechno explodovat

by
Difficulty:IntermediateLength:LongLanguages:

Czech (Čeština) translation by Tereza Foretová (you can also view the original English article)

V tomto kurzu realizujeme plně zničitelné pixel terénu, ve stylu her jako Cortex Command a červy. Naučíte se svět exploduje všude, kde budete střílet - a jak se dělá "prach" usadí na zem k vytvoření nové země.

Poznámka: Přestože tento kurz je napsán v zpracování a kompilována s Java, je třeba možnost využívat stejné techniky a pojmy v téměř jakémkoli prostředí, vývoj her.


Konečný výsledek náhled

Můžete hrát demo sami, příliš. WASD pro pohyb, levým tlačítkem myši střílet výbušné kulky, klepněte pravým tlačítkem myši sprej pixelů.


Krok 1: Terén

V našem sidescrolling pískoviště terén bude hlavní mechanik naší hry. Podobné algoritmy mají jeden obraz pro texturu v terénu a další jako černou a bílou masku definovat, které obrazové body jsou solidní. V této ukázce se terén a jeho textury jsou jeden obrázek a pixely jsou pevné na základě zda jsou transparentní. Přístup masky by bylo vhodnější, pokud chcete definovat vlastnosti každého pixelu, jako jak pravděpodobně bude vytlačit nebo jak bouncy pixelu bude.

K vykreslení terénu, pískoviště kreslí statické pixelů první, pak dynamický pixelů se vším ostatním na vrcholu.

Terén má také metody pro zjištění, zda statické pixel v místě je solidní, či nikoliv a metody pro odstraňování a přidávání pixelů. Pravděpodobně nejúčinnější způsob, jak ukládat obraz je jako 1 jednorozměrné pole. 1D indexu z 2D souřadnice je velmi jednoduchý:

Aby pro dynamické pixelů odrazit budeme muset být schopni zjistit normální v každém bodě povrchu. Průchozího prostoru náměstí kolem požadovaného bodu, najít solidní pixelů okolí a průměrná jejich pozice. Vektor z této pozice do požadovaného místa, zpětné a normalizovat jej. Je normální!

Černé čáry představují normál v terénu na různých místech.

Zde je, jak to vypadá v kódu:


Krok 2: Dynamické Pixel a fyzika

V "terénu", sama o sobě jsou uloženy všechny statické pixelů-stěhování. Dynamické pixelů pixelů v současné době v pohybu a jsou uloženy odděleně od statické pixelů. Jak terén exploduje a usadí, pixelů prohodíme mezi statickými a dynamickými státy, jak vypudit a srazí. Každý pixel je definován řadou vlastností:

  • Polohu a rychlost (požadováno pro fyziku do práce).
  • Nejen umístění, ale i předchozí umístění pixelu. (Můžeme skenovat mezi dvěma body k detekci kolizí.)
  • Mezi další vlastnosti patří barvu pixelu, lepivost a bounciness.

Aby pixel pohybovat jeho pozice musí předávají svou rychlostí. Euler integrace, zatímco nepřesné pro komplexní simulace, je dostatečně jednoduchý pro nás efektivně pohybovat naši částice:

Uplynulý čas je že doba, která uplynula od poslední aktualizace. Přesnost každé simulace mohou být zcela nefunkční, pokud uplynulý čas je příliš variabilní nebo příliš velká. To není tak velký problém pro dynamické pixelů, ale to bude pro ostatní režimy detekce kolizí.

Budeme používat pevné velikosti timesteps, uplynulý čas a rozdělit ji na konstantní velikosti bloky. Každý blok je plný "aktualizace" fyzika, s jakoukoliv zbude posílán do dalšího rámečku.


Krok 3: Detekce kolizí

Detekce kolizí pro naše létání pixelů je stejně jednoduché jako kreslení některé řádky.

Si Bresenhamova linie algoritmus byl vyvinut v roce 1962 gentleman s názvem Jack E. Bresenhamova. Dodnes to se používá pro kreslení čar, jednoduché s aliasem efektivně. Algoritmus se drží striktně celá čísla a používá převážně sčítání a odčítání v pořadí na efficeintly dějovými. Dnes budeme ji používat pro jiný účel: detekce kolizí.

Jsem pomocí kódu převzato z článku o gamedev.net. Zatímco většina implementací algoritmu linii si Bresenhamova změní pořadí pořadí kreslení, tenhle konkrétní nám umožňuje vždy skenování od začátku do konce. Pořadí je důležité pro detekci kolizí, jinak nám bude rozpoznání kolize na špatný konec cestu pixelu.

Svah je nezbytnou součástí algoritmu linie je Bresenhamova. Algoritmus funguje rozdělením po svahu do své "vzestupu" a "run" komponenty. Je-li například na řádku svahu byl 1/2, můžeme lze vykreslit řádek umístění dvěma tečkami vodorovně, jde nahoru (a pravou) jeden a pak dva další.

Algoritmus ukazuji zde účty pro všechny scénáře, zda řádky má pozitivní nebo negativní sklon nebo pokud je svislá. Autor vysvětluje, jak se odvozuje na gamedev.net.


Krok 4: Kolize zpracování

Dynamický pixel proveďte jednu z následujících dvou věcí během kolize.

  • Hýbe se to dost pomalu, dynamický pixel je odebrán a statická je přidán do terénu, kde ho srazil. Lepení by naše nejjednodušším řešením. V algoritmu si Bresenhamova linie je nejlepší udržovat přehled o stavu a aktuálního bodu. Když je detekována kolize, "aktuální" bude první solidní pixel ray hity, zatímco "předchozí bod" je prázdné místo před něj. Předchozí bod je přesně polohu wehre musíme držet pixelu.
  • Pokud se pohybuje příliš rychle, pak se můžeme odrazit od terénu. To je, tady přichází ke slovu naše povrchové normální algoritmus! Zrcadlový obraz míč je počáteční rychlost normální aby se to odrazit.
  • Úhel obou stranách normální je stejný.


Krok 5: Kulek a výbuchů!

Kulky AKT, stejně jako dynamické pixelů. Pohyb je integrován stejným způsobem a detekce kolizí používá stejný algoritmus. Naším jediným rozdílem je kolize zpracování

Po rozpoznání kolize odrážky rozpad tím, že odstraní všechny statické pixelů v okruhu a pak uvedení dynamické pixelů na jejich místě s jejich rychlosti ukázal ven. Jsem použít funkci skenování čtvercová oblast kolem výbuchu zjistit, které obrazové body vypudit. Poté pixelu vzdálenost od středu se používá k vytvoření rychlost.


Krok 6: Hráč

Hráč není základní součástí destructable terénu mechanik, ale to zahrnuje některé detekci kolizí, který bude určitě důležité problémy, které čas od času přijde v budoucnu. Vysvětlím ti, jak kolize je zjištění a zpracování v demo pro hráče.

  1. Pro každou hranu, smyčku z jednoho rohu do druhého, kontrola každý pixel.
  2. Pokud pixel je solidní, začínají na středu hráče a skener k daný pixel do vás trefit solidní pixel.
  3. Pohyb hráče od první solidní pixelu, na který narazíte.

Krok 7: optimalizace

Tisíce pixelů jsou zpracovány současně, což docela trochu zatížit fyzikální engine. Stejně jako cokoliv jiného aby to bylo rychle, doporučil bych používat jazyk, který je dostatečně rychlý. Demo je zkompilován v Javě.

Můžete dělat věci pro optimalizaci na hladinu algoritmus. Například, počet částic z exploze může být snížena o nižší rozlišení zničení. Obvykle najdeme každý pixel a proměnit jej v 1 x 1 pixel a dynamické. Místo toho skenování každé 2 x 2 pixely nebo 3 x 3 a zahájení dynamický pixel velikosti. V demo používáme 2 x 2 pixely.

Pokud používáte Java, úklid bude problém. JVM pravidelně najít objekty v paměti, které nejsou používány, jako je dynamické obrazové body, které jsou zahozeny výměnou za statické pixelů a pokusit se zbavit těch prostor pro více objektů. Odstranění objektů, spoustu předmětů, ale vyžaduje čas, a pokaždé, když JVM dělá vyčištění, naše hra se zastaví krátce.

Jeden možných řešení používat cache nějakého druhu. Namísto vytváření a zničení objekty neustále, můžete jednoduše držet mrtvou objekty (jako je dynamické pixelů) se později znovu použit.

Všude, kde je to možné, používejte primitiv. Například pomocí objektů pro pozice a rychlosti bude dělat věci trochu těžší pro uvolnění paměti. Bylo by ještě lepší, kdyby jste mohli ukládat vše jako primitiv v jednorozměrné pole.


Krok 8: Provedení Your Own

Existuje mnoho různých směrů, které si můžete s tímto herních mechanik. Funkce lze přidat a upravit tak, aby odpovídaly styl hry, které si přejete.

Můžete například kolize mezi statickými a dynamickými pixelů lze zacházet jinak. Kolize masku pod terén lze použít k definování každé statické pixel lepivost, bounciness a sílu nebo pravděpodobnost získání vytlačil výbuch.

Existuje celá řada různých věcí, které můžete udělat, aby zbraně stejně. Odrážky lze podávat "Hloubka vniknutí", aby je mohl procházet tolika pixelů před výbuchem. Tradiční zbraň mechaniky lze také použít, jako pestrá rychlost střelby, nebo jako brokovnice, více odrážky mohou být vypalovány najednou. Dokonce si můžete, jako skákací částice mají odrážky skákat z kovových pixelů.


Závěr

2D terén ničení není zcela unikátní. Například klasiky, červy a tanky odstranit části terénu na výbuchy. Cortex Command využívá podobné skákací částice, které zde používáme. Jiné hry možná stejně, ale neslyšel jsem o nich dosud. Těším se na tom, co ostatní vývojáři dělat s tímto mechanik.

Většina toho, co jsem zde vysvětleno je plně implementována v demo. Prosím podívejte se na jeho zdroj je-li něco zdá nejasné nebo matoucí. Přidal jsem komentáře do zdroje, aby bylo co nejsrozumitelnější. Díky za čtení!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.