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

Vytvorenie izometrických svety: Primer pre vývojárov hier, pokračoval

by
Difficulty:IntermediateLength:LongLanguages:

Slovak (Slovenčina) translation by Jakub Dokoupil (you can also view the original English article)

V tomto tutoriále, budeme nadväzovať na pôvodný náter vytvárať izometrické svetov, a dozvedieť sa o implementáciu snímače, dlaždice spúšťač, úroveň prohozením, cestu nájsť a nasledujúcich, úroveň rolovanie, izometrický výška a Izometrický strely.


1. snímače

Snímače sú položky, ktoré môžu byť zozbierané do úrovne, zvyčajne jednoducho pešo cez ne - napríklad mince, drahokamy, peniaze a munície.

Vyzdvihnutie údajov je možné aj priamo do našej úrovni údajov ako je uvedené nižšie:

V tejto úrovni údaje používame 8 na označenie vyzdvihnutie (1 a 0 predstavujú steny a schodný dlaždice resp. ako predtým).

Je dôležité pochopiť, že 8 vlastne označuje dve dlaždice, nie len jeden: to znamená, že musíme najprv umiestniť dlaždice schodný trávy a potom miesto vyzdvihnutia na vrchole. To znamená, že každé vyzdvihnutie bude vždy na tráve dlaždice. Ak chceme aby bolo na schodný tehla dlaždice, potom budeme potrebovať ďalšiu dlaždicu označené iným číslom, hovoria 9, ktorá predstavuje "pickup na tehlové dlaždice".

Typické izometrickej umenia bude mať viacero schodný dlaždice - Predpokladajme, že máme 30. Uvedený prístup znamená, že ak máme N snímače budeme potrebovať (N * 30) dlaždice okrem 30 originálne dlaždice, ako každú dlaždicu budú musieť mať jedna verzia so snímačmi a jeden bez. Toto nie je veľmi účinný; namiesto toho sme sa mali snažiť na dynamicky vytvoriť týchto kombinácií.

Na tento účel môžeme použiť iné pole s vyzdvihnutie údaje sám, a pouzit miesto vyzdvihnutia obkladov na vrchole úroveň usporiadanie údajov:

... plus:

.. .results v:

pickups in level

Tento postoj zabezpečuje, že potrebujeme iba 30 originálne dlaždice okrem N vyzdvihnutie dlaždice, ako môžeme vytvoriť akúkoľvek kombináciu zmiešaním oboch umelecké diela, keď renderovanie úroveň.

Zdvihol snímačmi

Detekcia snímače sa vykonáva rovnakým spôsobom ako detekcia kolízie dlaždice, ale po presune charakter.

V funkcia isPickup(tile coordinate), skontrolujeme, či vyzdvihnutie údajov pole hodnota v danom koordinovať je vyzdvihnutie dlaždice alebo nie. Číslo v poli pickup na ktoré dlaždice ladia označuje druh pickup.

Sme skontrolovať kolízie pred prechodom charakteru ale skontrolovať snímače potom, pretože v prípade kolízie znak by zaberať miesto ak už je obsadený kolízie dlaždice, ale v prípade snímače znak je voľne pohybovať nad ním.

Ďalšie vec k poznámke je, že zvyčajne nikdy zmien údajov kolízie, ale vyzdvihnutie údajov sa zmení vždy, keď sme vyzdvihnúť položky. (Zvyčajne len jedná zmeníte hodnotu v poli pickup, povedať, 8 k 0.)

To vedie k problém: čo sa stane, keď budeme musieť reštartovať úroveň, a tak obnoviť všetky snímače späť do ich pôvodných pozícií? Nemáme informácie na to, ako vyzdvihnutie pole zmenilo aktéra zdvihol položiek. Riešenie je použiť duplicitné pole pre snímače, zatiaľ čo v hre a zachováte pôvodný vyzdvihnutie array - napríklad používame [pickupsArray] a [pickupsLive], klon posledne z bývalého na začiatku úrovne, a iba zmeny [pickupsLive] počas hrania.


Kliknite, ak chcete umiestniť fokus SWF, potom pomocou klávesov so šípkami. Kliknite tu pre plnej veľkosti-verziu.

Mali by ste oznámenie, že sme skontrolovať snímače vždy, keď znak je na dlaždicu. To môže nastať viackrát do druhej (môžeme skontrolovať iba vtedy, keď používateľ presunie, ale môžeme ísť dookola do dlaždice) ale vyššom logika nebude zlyhať; pretože sme stanovili vyzdvihnutie pole údajov 0 prvýkrát odhalíme vyzdvihnutie, všetky následné isPickup(tile) kontroly sa vracia false pre dlaždicu.


2. spúšťacie dlaždice

Ako už názov napovedá, dlaždice spúšťač spôsobiť niečo stane, keď hráč kroky na nich alebo stlačí kláves počas šliapania na nich. Môžu teleport hráč do iného umiestnenia, otvorte brány alebo spawn nepriateľa, dať niekoľko príkladov. V istom zmysle, snímače sú len osobitnú formu spúšť dlaždice: keď hráč kroky na kameň obsahujúce mince, mince zmizne a ich mince počítadlo zvyšuje.

Pozrime sa ako by sme mohli realizovať dvere, ktoré má hráč na inú úroveň. Dlaždíc vedľa dverí bude spúšťač dlaždice; keď hráč stlačí medzerníka, budete pokračovať do ďalšej úrovne.

hero at door

Zmena úrovne, všetci musíme urobiť, je swap aktuálne pole údaje úrovne s nové úrovne, a nastaviť nové dlaždice poloha a smer pre hrdinu charakter.

Predpokladajme, že existujú dve úrovne s dverami umožniť absolvovanie medzi nimi. Pretože Zem dlaždicu vedľa dverí bude dlaždice spúšťač v oboch úrovniach, môžeme použiť ako novú pozíciu znakov zobrazujú v úrovni.

Vykonávanie logika tu je rovnaký ako snímače a opäť môžeme použiť pole na uloženie hodnoty spúští. To je neefektívna a mali by zvážiť ďalšie dátové štruktúry pre tento účel, ale poďme držať to jednoduchý kvôli tutorial. Nechajte nové úrovne polí sa ako nižšie (7 označuje dvere):

Nech úrovne majú niekoľko snímačov, ako je uvedené nižšie vyzdvihnutie polia:

Nech zodpovedajúce vyvolať dlaždice polia na každej úrovni nižšie:

Hodnoty (1 a 2) označujú úroveň, ktorá sa načíta, keď hráč stlačí priestor.

Tu je kód, ktorý sa spustí, keď hráč udrie tento kľúč:

Funkcia isTrigger() skontroluje, či spúšť údajov pole hodnota v danom súradníc je väčšia ako nula. Ak áno, náš kód prechádza táto hodnota doRelevantAction(), rozhoduje funkcia hovor ďalej. Pre naše účely budeme používať jednoduché pravidlo, že ak hodnota leží medzi 1 a 10, je dvere, a tak táto funkcia sa nazýva:

Keďže hodnota dlaždice v spúšťač pole označuje úroveň, ktorá musí byť naložené, sme jednoducho prejsť do swapLevel(). To znamená zasa, že naša hra má desať úrovní.

Tu je pracovné demo. Skúste vyzdvihnúť položky pešo cez ne a vymení úrovne stojí vedľa dverí a biť priestor.


Kliknite, ak chcete umiestniť fokus SWF, potom pomocou klávesov so šípkami. Kliknite tu pre plnej veľkosti-verziu.

Urobil som spúšťač aktivovaný, keď sa uvoľní priestor; Ak počúvame len pre stlačené potom skončíme v slučke, kde budeme swap medzi úrovňami, tak dlho, ako je kláves stlačený, pretože znak vždy trenie v novej úrovni na spúšť dlaždicu.

Tu je celý kód (v AS3):


3. cesta nález

Hľadanie cesta a cesta je po pomerne zložitý proces. Existujú rôzne prístupy pomocou rôznych algoritmov pre nájdenie cestu medzi dvoma bodmi, ale naša úroveň údajov je 2D array veci sú jednoduchšie, ako by mohli inak byť - budeme mať dobre definované a jedinečné uzly, ktoré hráč môže zaberať a môžeme ľahko skontrolovať či sú schodný.

Podrobný prehľad o pathfinding algoritmov je mimo rozsah tohto článku, ale pokúsim sa vysvetliť najbežnejší spôsob, ako to funguje: Najkratšia cesta algoritmus, ktorý A * a Dijkstrov algoritmus sú slávne implementácií.

Snažíme sa nájsť uzly spájajúce počiatočný uzol a koncový uzol. Z počiatočného uzla navštívte všetkých ôsmich susednými uzlami a označiť všetky ako navštívené; Toto jadro proces sa opakuje pre každú novo navštívil uzol, rekurzívne. Každé vlákno sleduje uzly navštívil. Pri skákaní na susednými uzlami, uzly, ktoré už boli navštívené uzly sú vynechané (Rekurzia zastávky); inak, proces pokračuje, kým dosiahneme koncový uzol, kde Rekurzia konce a celú cestu nasledovať vrátené ako pole uzol. Niekedy koncovým uzlom je nikdy dosiahnutý, v prípade zistenia cesta zlyhá. Sme zvyčajne skončiť nájsť viaceré cesty medzi dvoma uzlami, pričom v tomto prípade berieme s najmenej počet uzlov.

Existuje mnoho štandardných roztokov pre cestu zistenia na 2D polia, takže sme preskočiť znovuobjavenie kolesa. Využime Toto riešenie AS3 (odporúčam, môžete vyskúšať tento skvelý vysvetľujúce demo)).

Riešenie vracia pole s bodmi, ktoré tvoria cestu z východiskového bodu do koncového bodu:

Cesta po

Akonáhle budeme mať cestu ako pole uzol, musíme urobiť charakter po nej.

Chceme, aby sa charakter chodiť na kameň, ktorý klikneme na som. Najprv musíme vyhľadať cestu medzi uzol, ktorý znak práve zaberá a uzol, kde sme klikli. Ak úspešnú cestu, potom musíme pohybovať znak prvý uzol v uzol poľa, v ktorom je ako cieľ. Akonáhle sa dostaneme na cieľový uzol, skontrolujeme, ak neexistujú žiadne ďalšie uzly v poli uzol, a ak áno, nastaviť ďalší uzol ako cieľ - a tak ďalej až sa dostaneme konečný uzol.

Môžeme tiež zmeniť smer prehrávač založený na aktuálnom uzle a nový cieľový uzol zakaždým dostaneme uzol. Medzi uzlami, sme jednoducho chodiť v požadovanom smere nedosiahneme cieľový uzol. Je to veľmi jednoduché AI.

Pozrite sa na tento príklad:


Kliknite pre pohyb postavy. Kliknite tu pre plnej veľkosti-verziu.

Tu je plná zdroj:

Možno ste si všimli, že som odstránil kolízie Kontrola logiky; nie je potrebné, pretože sme nemôžete manuálne presunúť náš znak pomocou klávesnice. Avšak, potrebujeme odfiltrovať platný kliknite body určením, či sme klikli v rámci pochôdznej plochy, skôr ako obkladačky alebo iné non-schodný dlaždice.

Ďalším zaujímavým bodom pre kódovanie AI: Nechceme znak obrátiť na tvári Ďalšia dlaždica v poli uzol, ako prišiel v súčasnom, ako také okamžite zase výsledky v náš charakter, chôdza na hraniciach dlaždice. Namiesto toho by sme mali počkať, kým znak je pár krokov vnútri dlaždice, než sa pozrieme na ďalší cieľ. Je lepšie, môžete ručne umiestniť hrdinu uprostred aktuálnu dlaždice len pred obraciame, aby sa to všetko dokonalé.

Tiež, ak si prezrieť vyššie demo, môžete si všimnúť, že naša logika čerpať dostane narušený, keď hrdina sa pohybuje šikmo blízko steny dlaždice. Toto je extrémny prípad, kde pre jednu snímku, náš hrdina sa zdá byť vnútri kachličiek. To sa deje, pretože sme vypli kolízie overiť. Jedno riešenie je použitie pathfinding algoritmus, ktorý ignoruje diagonálne riešenia. (Takmer všetky cestu nález algoritmy mať možnosti povoliť alebo zakázať diagonálne chôdze riešenia).


4. strely

Projektil je niečo, čo sa hýbe v určitom smere najmä rýchlosťou, ako strela, kúzlo, loptu a tak ďalej.

Všetko o projektil je rovnaký ako hrdinu charakter, okrem výšky: namiesto valcovanie po zemi, projektily často vznášať nad ním v určitej výške. Guľka prejde nad úrovňou pása postavy, a dokonca lopta musí odraziť okolo.

Jedna zaujímavá vec k poznámke je, že Izometrický výška je rovnaká ako výška v 2D bočný pohľad. Existujú žiadne komplikované konverzie. Ak lopta 10 pixelov nad zemou v karteziánskych súradníc, je 10 pixelov nad zemou v izometrickej súradnice. (V našom prípade relevantné OS je os y.)

Poďme sa pokúsiť realizovať loptou poskakovanie okolo v našej murované trávnych porastov. Budeme ignorovať tlmiace účinky (a aby sa odrazí pokračovať donekonečna) a na dotyk realizmus pridáme tieň na loptu. Sme posunie tieň rovnako ako sme sa presunúť hrdinu charakter (t. j. bez použitia hodnotu výšky), ale na ples musíme pridať hodnotu výšky izometrickej hodnotu Y. Height hodnotu bude zmeniť od rámu k rámu v závislosti od závažnosti a potom, čo lopta dopadne na zem sme budete flip aktuálnu rýchlosť pozdĺž osi y.

Predtým, než sa pustíme do skákacie izometrickej systéme, uvidíme, ako sme môže realizovať v 2D karteziánske systému. Dajte nám predstavujú výšku lopty do premennej zValue. Predstavte si, že začať s, lopta je desať pixelov, takže zValue = 10. Použijeme dve ďalšie premenné: incrementValue, ktorý začína na 0 a gravity, ktorý má hodnotu 1.

Každý rám, pridáme incrementValue do zValue, a odčítanie gravitácie z incrementValue. Pri zValue dosiahne 0, to znamená, guľôčka dosiahla zem; v tomto bode sme flip znamienko incrementValue vynásobením -1 premeniť ju na kladné číslo. To znamená, že bude guľa pohybovať smerom hore od nasledujúcu snímku, teda odráža.

Tu je, ako to vyzerá v kóde:

Sme vlastne chystá pomocou mierne upravenú verziu, že:

To odstraňuje tlmiaci účinok a nechá loptu odraziť navždy.

Použitie tohto nášho loptu, dostaneme nižšie demo:


Kliknite, ak chcete umiestniť fokus SWF, potom pomocou klávesov so šípkami. Kliknite tu pre plnej veľkosti-verziu.

Tu je plný AS3 kód:

Pochopiť, že úlohe, ktorú zohráva tieň je veľmi dôležitý, ktorý pridáva realizmus tejto ilúziu. V uvedenom príklade som pridal pol guľa výška do y polohy gule tak, aby to odrazí v správnej polohe vzhľadom na tieň.

Všimnite si, že teraz používame dve obrazovky súradníc (x a y) predstavujú tri rozmery v izometrickej súradnice - y v obrazovkových súradniciach je tiež osi z izometrickej súradníc. To môže byť mätúce!


5. Izometrický rolovanie

Keď úroveň oblasti je oveľa väčšia ako oblasť viditeľné obrazovky, musíme to prejdite.

Viditeľná obrazovka oblasti možno považovať za menší obdĺžnik v rámci väčších obdĺžnik kompletný úrovni oblasti. Posúvanie sa v podstate len pohybom vnútorný obdĺžnik vnútri väčšie:

Scrolling Start

Zvyčajne, keď takéto rolovanie stane, pozíciu hráča zostáva rovnaká vzhľadom na obrazovke obdĺžnik, obyčajne v strede obrazovky. Všetko čo potrebujeme, implementovať, posúvanie, je sledovať rohový bod vnútorný obdĺžnik:

Scrolling Next

Tento rohový bod, ktorý je v karteziánskych súradníc (na obrázku môžeme len ukázať izometrickej hodnoty), bude spadať do dlaždice úroveň údajov. Posúvanie, sme prírastkov pozíciu x a y rohový bod v karteziánskych súradníc. Teraz môžeme previesť tento bod izometrickej súradnice a pomocou nakresliť na obrazovku.

Novo konvertovaných hodnôt v izometrickej priestor, musia byť v rohu našej obrazovke príliš, čo znamená, že sú nové (0, 0). Takže pri parsování a kreslenie úroveň údajov, sme odpočítajte túto hodnotu od izometrickej polohy jednotlivých dlaždíc, a len čerpať, ak dlaždicu Nová pozícia spadá do obrazovky. Môžeme to vyjadriť v krokoch takto:

  • Aktualizovať karteziánske rohový bod súradníc x a y.
  • Previesť do izometrickej priestoru.
  • Odpočítajte túto hodnotu od izometrické kreslenie pozície jednotlivých dlaždíc.
  • Nakresliť dlaždice, iba ak novú pozíciu izometrické kreslenie spadá do obrazovky.

Pozrite sa na tento príklad (pomocou ŠÍPOK prechádzať):


Kliknite, ak chcete umiestniť fokus SWF, potom pomocou klávesov so šípkami. Kliknite tu pre plnej veľkosti-verziu.

Tu je plný AS3 zdrojový kód:

Upozorňujeme, že rohový bod sa zvýši v opačnom smere hrdinu pozícia aktualizácia, ako sa pohybuje. Tým zaistíte, že hrdina pobyty kde je vzhľadom na obrazovke:

Kresliť logika mení len dva riadky, kde sme sa zistiť Kartézske súradnice jednotlivých dlaždíc. Míňame len rohový bod k východiskovému bodu, ktorý skutočne spája body 1, 2 a 3 uvedené vyššie:

Pár poznámok:

  • Počas posúvania, budeme musieť čerpať ďalšie dlaždice na obrazovke hraniciach, inak môžeme vidieť dlaždice miznú a objavujú na obrazovke extrémy.
  • Ak máte dlaždice, ktoré zaberajú viac než jedného priestoru, potom budete musieť čerpať viac dlaždíc na hraniciach. Napríklad, ak najväčší dlaždice v celý súbor opatrení X y, potom musíte čerpať X viac dlaždice, doľava a doprava a Y viac dlaždice na hornej a dolnej. Tým zaistíte, že rohy väčšie dlaždice stále budú viditeľné pri posúvaní v alebo mimo obrazovku.
  • Stále potrebujeme uistite sa, že nemáme prázdnej oblasti na obrazovke, kým sme sa blíži hranice úrovne.
  • Úrovne by len posuňte najextrémnejších dlaždice dostane vyvodiť na obrazovke zodpovedajúce extreme - po tomto, znak naďalej uberá priestor obrazovky bez úrovni posúvania. Na tento účel musíme sledovať všetky štyri rohy obdĺžnika, vnútorný displej a throttle rolovanie a hráč pohyb logiku zodpovedajúcim spôsobom. Ste sa na výzvu skúsiť vykonávacie že sami?

Záver

Táto séria je zameraná najmä na začiatočníkov snaží preskúmať izometrickej herných svetov. Mnohé pojmy vysvetlené majú alternatívne prístupy, ktoré sú trochu zložitejšie a zámerne si vybrali tie najjednoduchšie. Môže naplniť všetky scenáre, ktoré sa môžu vyskytnúť, ale vedomosti získané možno stavať tieto koncepcie vytvoriť oveľa zložitejšie riešenia.

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.