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

Vytváření izometrických světy: Primer pro vývojáře her, pokračování

by
Difficulty:IntermediateLength:LongLanguages:

Czech (Čeština) translation by Jakub Dokoupil (you can also view the original English article)

V tomto kurzu budeme stavět na původní nátěr vytváření izometrických světy a dozvědět se o realizaci snímače, aktivační dlaždice, úroveň výměny, cesta hledání a následující, úroveň posouvání, izometrické výška a izometrické projektily.


1. pick-upy

Snímače jsou položky, které mohou být shromážděné v rámci úrovně, obvykle jen chodit přes ně - například mince, drahokamy, peníze a náboje.

Výstupní data mohou být ubytována přímo do našich dat na úrovni jako níže:

V této úrovni údaje, používáme 8 k označení pickup (1 a 0 představují stěny a pochozí dlažba respektive jako dříve).

Je důležité pochopit, že 8 ve skutečnosti označuje dvě dlaždice, ne jen jeden: to znamená, musíme nejprve umístit dlaždice pochozí trávy a pak místo vyzvednutí na vrcholu. To znamená, že každý vyzvednutí bude vždy na dlaždici trávy. Pokud chceme, aby se na pochozí cihlové dlaždice, pak budeme potřebovat další dlaždice označen jiným číslem, řekněme 9, která představuje "vyzvednutí na cihla dlaždice".

Typická izometrické umění bude mít více pochozí dlaždice - Předpokládejme, že máme 30. Výše uvedený přístup znamená, že pokud máme N kleště budeme potřebovat (N * 30) dlaždice vedle 30 původních dlaždic, jak každá dlaždice budou muset mít jednu verzi s pick-upy a jeden bez. To není příliš efektivní; místo toho bychom měli zkusit k dynamickému vytvoření tyto kombinace.

Chcete-li to, můžeme použít jiné pole snímače daty sám a použít toto místo vyzvednutí obkladů na úroveň rozložení dat:

... plus:

.. .results v:

pickups in level

Tento přístup zajišťuje, že potřebujeme pouze 30 originální dlaždice vedle N pickup dlaždice, jak můžeme vytvořit libovolnou kombinaci smícháním obou uměleckých děl, při vykreslení na úrovni.

Vyzvednutí kleště

Detekce snímače se provádí stejným způsobem jako detekce kolize dlaždice, ale po přestěhování charakter.

Ve funkci isPickup(tile coordinate) zkontrolujeme, zda sběrného datového pole na dané souřadnice hodnotu sběrného okénka či nikoliv. Číslo v poli vyzvednutí na této dlaždici souřadnice označuje typ vyzvednutí.

Jsme zjistit kolize před přesunutím charakter, ale kontrola snímače, protože v případě kolize by neměla charakter zabírají místo, pokud je již obsazena kolize dlaždice, ale v případě snímače znak je volně pohybovat nad ním.

Další věc k poznámce je, že kolize dat obvykle nikdy nemění, ale výstupní údaje změní vždy, když jsme vyzvednout položky. (Jedná se obvykle jen o změnu hodnoty v poli pickup od, řekněme, 8 k 0.)

To vede k problému: co se stane, když budeme muset restartovat úroveň, a tak obnovit všechny snímače zpět do své původní polohy? Nemáme informace k tomu, jak je snímací pole se změnila jako hráč vyzvednout položky. Řešením je použít duplicitní pole pro snímače, zatímco ve hře a zachovat původní snímací pole – například [pickupsArray] a [pickupsLive], klonovat od prvně na začátku úrovně a měnit pouze [pickupsLive] během hry.


Klepněte fokus SWF, pak použijte klávesy se šipkami. Klepnutím sem zobrazíte plné velikosti-verzi.

Všimněte si, že jsme zkontrolovat kleště pokaždé, když je znak na dlaždici. K tomu může dojít vícekrát během sekundy (můžeme kontrolovat pouze tehdy, když uživatel přesune, ale můžeme jít kolem dokola uvnitř dlaždic) ale výše nedojde k selhání logiky; vzhledem k tomu, nastavíme snímací pole dat 0 poprvé naměříme pickup, všechny následné isPickup(tile) kontroly vrátí false pro tuto dlaždici.


2. spouštěcí panely

Jak už název napovídá, aktivační dlaždice způsobit něco, co se stane, když hráč kroky na ně nebo stiskne klávesu při šlápnutí na ně. Oni mohou teleportovat hráče do jiného umístění, otevřít bránu nebo potěr nepřítele, dát pár příkladů. V jistém smyslu, snímače jsou jen zvláštní formou dlaždic aktivační události: když hráč šlápne na kámen obsahující mince, mince zmizí a jejich mince Čítač zvyšuje.

Pojďme se podívat na to, jak bychom mohli zavést dveře, které má hráč na jinou úroveň. Kartiku dveře bude aktivační událost dlaždice; Když hráč stiskne klávesu MEZERNÍK, bude pokračovat na další úroveň.

hero at door

Chcete-li změnit úroveň, vše, co musíme udělat je vyměnit současné úrovně dat pole s tím nové úrovně a nastavte nové dlaždice pozici a směr pro hrdiny charakter.

Předpokládejme, že existují dvě úrovně s dveřmi umožňující předávání mezi nimi. Protože zem dlaždice vedle dveří bude aktivační událost dlaždice v obou úrovních, můžeme použít jako nové místo pro znak když se objeví v úrovni.

Implementace logika zde je stejná jako kleště a opět používáme pole k uložení hodnot aktivační události. To je neefektivní a byste měli vzít v úvahu jiné datové struktury pro tento účel, ale pojďme držet to jednoduchý kvůli kurzu. Nechte pole nové úrovně jako níže (7 označuje dveře):

Ať úrovně mají pár snímače, jak je podrobně uvedeno v níže snímací pole:

Nechat vyvolat pole dlaždice pro každou úroveň odpovídající níže:

Hodnot (1 a 2) označují na úroveň, která bude načten v případě, že hráč stiskne prostor.

Zde je kód, který běží, když hráč udeří tento klíč:

Funkce isTrigger() kontroluje, zda aktivační událost data pole na dané souřadnice hodnotu větší než nula. Pokud ano, náš kód předává tuto hodnotu doRelevantAction(), která rozhoduje volat další funkce. Pro naše účely budeme používat jednoduché pravidlo, že pokud hodnota leží mezi 1 a 10, to jsou dveře, a tak se tato funkce nazývá:

Vzhledem k tomu, hodnota dlaždice v poli aktivační událost také označuje úroveň, které musí být načten, můžeme můžete jednoduše předejte swapLevel(). To znamená, že naše hra má deset úrovní.

Tady je funkční demo. Zkuste vyzvednout položky při chůzi nad nimi a vymění úrovně stojí vedle dveří a stisknutím klávesy Space.


Klepněte fokus SWF, pak použijte klávesy se šipkami. Klepnutím sem zobrazíte plné velikosti-verzi.

Udělal jsem aktivační událost aktivována, když se uvolní prostor; Pokud posloucháme jen pro klíč stisknutí pak skončíme ve smyčce, kde jsme prohodit mezi úrovněmi, pokud klíč je držen dole, protože znak vždy spouští v nové úrovni horní dlaždici aktivační události.

Zde je úplný kód (AS3):


3. cesta hledání

Cesta hledání a sledování trasy je poměrně komplikovaný proces. Existují různé přístupy, pomocí různých algoritmů pro hledání cesty mezi dvěma body, ale naše data úrovně je 2D pole, které věci jsou jednodušší, než by jinak byly - jsme dobře definované a jedinečné uzly, které hráč může zabírat a můžeme snadno zkontrolovat zda jsou pochozí.

Podrobný přehled pathfinding algoritmů je mimo rámec tohoto článku, ale budu se snažit vysvětlit Nejčastější způsob, jak to funguje: algoritmus pro hledání nejkratší cesty, z nichž A * a Dijkstrův algoritmus jsou slavné implementace.

Naším cílem je najít uzly připojení uzel počáteční a koncový uzel. Od počáteční uzel navštívit všech osmi sousedních uzlů a označí je všechny jako navštívené; Tento základní proces se opakuje pro každý nově navštívených uzel, rekurzivně. Každý podproces sleduje uzly navštívil. Při skákání se sousedními uzly, uzly, které již byly navštívený uzly jsou vynechány (zastaví rekurze); jinak proces pokračuje, dokud nedosáhneme konečné uzlu, kde končí rekurze a celou cestu, následoval je vrácena jako uzel pole. Někdy na konci uzel není přístupný, v takovém případě cesta hledání nezdaří. Jsme se obvykle nakonec hledání více cest mezi dvěma uzly, v takovém případě bereme ten s nejmenší počet uzlů.

Existuje mnoho standardních roztoků k cesta hledání založené na 2D pole, takže budeme přeskočit znovunalezení toho kola. Pojďme použít toto řešení AS3 (doporučuji, že Podívejte se na toto skvělé vysvětlující demo)).

Řešení vrátí matici s body, které tvoří cestu od počátečního bodu do koncového bodu:

Cesta po

Jakmile budeme mít cestu jako uzel matice, musíme udělat znak po ní.

Říkají, že chceme chodit do dlaždic, které klikneme na znak. Nejprve musíme hledat cestu mezi uzel, který znak v současnosti zabírá a uzel, kam jsme klikli. Pokud úspěšné cesty, pak musíme přesunout že znak do prvního uzlu v uzlu pole nastavením je jako cíl. Jakmile se dostaneme do cílového uzlu, zkontrolujeme, kde jsou všechny další uzly v poli uzel a pokud ano, nastavte další uzel jako cíl - a tak dále dokud nedorazíme poslední uzel.

My se také změnit směr přehrávač založený na aktuální uzel a nový cílový uzel pokaždé, když dorazíme do uzlu. Mezi uzly jen chodíme v požadovaném směru až se dostaneme na cílový uzel. Je to velmi jednoduché AI.

Podívejte se na tento příklad pracovat:


Klepnutím přesuňte znak. Klepnutím sem zobrazíte plné velikosti-verzi.

Zde je úplný zdroj:

Možná jste si všimli, že jsem odstranil logika Kontrola kolizí; již není potřeba, přesouváme nelze ručně naši postavu pomocí klávesnice. Však potřebujeme k odfiltrování platné klepněte na body určením, zda jsme klikli v rámci pochozí plochy, spíše než obkládacích dlaždic nebo jiné non pochozí dlaždice.

Dalším zajímavým bodem pro kódování AI: nechceme, aby znak obrátit čelit další dlaždice v poli uzel, hned, jak přijel v aktuální, jako takový bezprostřední turn následek našeho charakteru chůze na hranice dlaždic. Místo toho bychom měli počkat, dokud znak je několik kroků dovnitř dlaždice, než se podíváme na další cíl. Také je lepší ručně umístit hrdina uprostřed současné dlaždice jen než se obracíme, aby se to všechno cítím perfektně.

Také máte-li prozkoumat výše demo, můžete si všimnout, že naše draw logiky dostane narušen, když hrdina se pohybuje šikmo blízko obkládacích dlaždic. To je extrémní případ kde, jeden snímek, náš hrdina se zdá být uvnitř stěny dlaždice. To se děje, proto jsme zakázali kontrola kolize. Jeden řešením je použití pathfinding algoritmus, který ignoruje diagonální řešení. (Téměř všechny cesty hledání algoritmy mají možnosti povolit nebo zakázat diagonální chůze řešení.)


4. projektily

Střela je něco, co se hýbe v určitém směru s určitou rychlostí, jako kulka, magické kouzlo, koule a tak dále.

Vše o projektil je stejná jako hrdina charakter, kromě výšky: namísto vrácení po zemi, projektily často plavat nad ní v určité výšce. Kulka bude cestovat nad úrovní pasu postavy, a dokonce i míč možná muset odrazit kolem.

Jedna zajímavá věc k poznámce je, že izometrické výška je stejná jako výška v 2D boční pohled. Neexistují žádné komplikovaných převody. Je-li míč 10 pixelů nad zemí v kartézských souřadnicích, je 10 pixelů nad zemí v izometrické souřadnice. (V našem případě je relevantní osa y).

Pojďme se pokusit zavést míčem poskakování kolem v našich zděný louky. Budeme ignorovat tlumící účinky (a tak učinit skákací pokračovat donekonečna), a na dotek realismu přidáme stín na ples. Můžeme přesunout stín stejně jako jsme se přesunout hrdiny charakter (tj. bez použití hodnota výšky), ale na míč musíme přidat hodnotu výšky izometrické hodnotu Y. Hodnota výšky změní od rámu k rámu podle závažnosti, a poté, co míč dopadne na zem Zahrajem si aktuální rychlost podél osy y.

Angličan Sirr skákání v isometrické soustavě, uvidíme, jak můžeme realizovat v 2D kartézský systém. Dejte nám představují výšku míče pomocí proměnné ZValue –. Představte si, že Předně, míč je deset pixelů vysoký, takže ZValue – = 10. Budeme používat dvě další proměnné: incrementValue, která začíná na 0 a gravitace, který má hodnotu 1.

Každý rámec, můžeme přidat incrementValue ZValue – a odečíst gravitace od incrementValue. ZValue – dosáhne 0, znamená to, že míč dosáhl na zem; v tomto okamžiku můžeme převrátit znaménko incrementValue vynásobením -1 ji proměnilo kladné číslo. To znamená, že se kulička bude pohybovat směrem nahoru od dalšího snímku, tak skákání.

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

Ve skutečnosti se musíme použít mírně upravenou verzi, že:

To odstraní tlumicí účinek a nechá míč odrazit navždy.

Uplatnění tohoto na náš ples, dostaneme pod demo:


Klepněte fokus SWF, pak použijte klávesy se šipkami. Klepnutím sem zobrazíte plné velikosti-verzi.

Zde je úplný kód AS3:

Pochopte, že úlohou stín je velmi důležité, ten, který přidává k realismu této iluzi. V příkladu výše Přidal jsem polovinu míč výšky míč je y-pozice, tak, že se to odrazí na správné pozici s ohledem na stín.

Všimněte si také, že jsme nyní používat dvě obrazovky souřadnice (x a y) představují tři dimenze v izometrické souřadnice - y v obrazovkových souřadnicích je rovněž osy v izometrické souřadnice. To může být matoucí!


5. izometrické posouvání

Když úroveň oblast je mnohem větší než oblast viditelné obrazovky, budeme muset rolovací.

Jako menší obdélník v rámci větší obdélník kompletní úrovni oblasti lze považovat oblast viditelné obrazovky. Posun je, v podstatě jen stěhování vnitřní obdélník uvnitř větší:

Scrolling Start

Obvykle když takové posouvání dojde, postavení hráče zůstává stejné ohledně obrazovky obdélník, běžně ve středu obrazovky. Vše, co potřebujeme k implementaci posouvání, je sledovat rohový bod obdélníku, vnitřní:

Scrolling Next

Tento rohový bod, který je v kartézských souřadnicích (v obrázku můžeme zobrazit pouze izometrické hodnoty), bude spadat do dlaždice v data úrovně. Pro posouvání, můžeme zvýšit pozice x a y-z rohového bodu v kartézských souřadnicích. Nyní můžeme tento bod převést na izometrické souřadnice a můžete kreslit na obrazovku.

Nově převedené hodnoty v izometrické prostoru, musí být do rohu naší obrazovky, což znamená, že jsou nové (0, 0). Takže při analýze a kresba úrovně dat, jsme odečíst tuto hodnotu z polohy izometrické každé dlaždice a pouze kreslit, je-li deska je nová pozice spadá do obrazovky. Můžeme to vyjádřit v krocích jako tak:

  • Aktualizujte kartézské rohového bodu x a y souřadnice.
  • Převeďte tento izometrické prostoru.
  • Odečte tuto hodnotu z pozice izometrické kreslení každé dlaždice.
  • Pouze v případě, že nové pozice izometrické kreslení spadá do obrazovky, nakreslete na dlaždici.

Podívejte se na tento příklad (použijte šipky k posouvání):


Klepněte fokus SWF, pak použijte klávesy se šipkami. Klepnutím sem zobrazíte plné velikosti-verzi.

Zde je úplný zdrojový kód AS3:

Vezměte prosím na vědomí, že rohový bod je zvýšen opačným směrem k aktualizaci pozice hrdiny, jak on se pohybuje. Tím je zajištěno, že hrdina pobytů, kde je s ohledem na obrazovce:

Logika remíza se mění pouze ve dvou řadách, kde určíme kartézské souřadnice každé dlaždice. Právě jsme se projít rohový bod do počátečního bodu, který vlastně spojuje body 1, 2 a 3 výše:

Pár poznámek:

  • Při posouvání, budeme muset nakreslit další dlaždice na hranicích obrazovky, jinak můžeme vidět dlaždice mizí a objevují na obrazovce extrémy.
  • Pokud máte dlaždice, které zabírají více místa, pak budete potřebovat nakreslit více dlaždic na hranicích. Například pokud největší dlaždice v celé sadě opatření X y, pak budete potřebovat na remízu X více dlaždic na levé a pravé a Y více dlaždic na horní a dolní. Tím zajistíte, že rohy větší dlaždice stále budou viditelné při posouvání v nebo mimo obrazovku.
  • Stále potřebujeme Ujistěte se, že nemáme prázdné oblasti na obrazovce, zatímco jsme se blíží hranice úrovně.
  • Na úroveň by měla pouze posunout až do nejextrémnějších dlaždice dostane na odpovídající obrazovce extrémní - po tomto, znak by měl pokračovat, pohybující se v prostoru na obrazovce bez úrovně posouvání. K tomu budeme muset sledovat všechny čtyři rohy obdélníku vnitřní obrazovky a omezení logiky pohyb posouvání a hráč odpovídajícím způsobem. Jste na výzvu zkusit, že implementace pro sebe?

Závěr

Tato série je zejména zaměřena na začátečníky snaží prozkoumat izometrické herní světy. Mnoho konceptů vysvětlil mají alternativní přístupy, které jsou o něco složitější a já vybrali těch nejjednodušších. Nemusí splnit všechny scénáře, které mohou nastat, ale poznatky získané lze stavět na tyto pojmy vytvářet mnohem složitější řešení.

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.