Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Xcode

Úvod do GameplayKit: časť 2

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called An Introduction to GameplayKit.
An Introduction to GameplayKit: Part 1
An Introduction to GameplayKit: Part 3

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

Toto je druhá časť Úvod do GameplayKit. Ak nemáte ešte prešiel prvú časť, potom odporúčam čítať návod najprv pred pokračovaním s týmto.

Úvod

V tomto tutoriále, budem vás naučí o dva viac funkcií GameplayKit rámca môžu využiť:

  • agenti, ciele a správania
  • pathfinding

Využitím agentov, cieľov a správanie, budeme stavať niektoré základné umelej inteligencie (AI) do hry, ktoré sme začali v prvej časti tejto série. Umelá inteligencia umožní naše červené a žlté nepriateľské bodky na cieľ a presunúť smerom k našej modrej hráč dot. Budeme tiež vykonávať pathfinding rozšíriť na tomto AI navigáciu okolo prekážok.

Pre tento tutorial, môžete použiť vašu kópiu dokončenie projektu z prvej časti tejto série alebo prevzatie čerstvej kópie zdrojového kódu z GitHub.

1. splnomocnení zástupcovia, ciele a správania

V GameplayKit, agentov, cieľov a správanie sa používajú v kombinácii s ostatnými definovať ako rôzne objekty pohybovať vo vzťahu k sebe navzájom celej scény. Pre jeden objekt (alebo SKShapeNode v našej hre), môžete začať vytvorením agent, zastúpení GKAgent triedy. Avšak, pre 2D hry, ako je tá naša, musíme použiť betón triedy GKAgent2D.

Trieda GKAgent je podtriedou GKComponent. To znamená, že hru treba používať jednotky a komponentov-založené štruktúry ako som vám ukázal v prvom tutoriále tejto série.

Látky predstavujú objektu polohy, veľkosti a rýchlosti. Potom pridáte správania, zastúpená GKBehaviour triedy, tento agent. A konečne, vytvoriť súbor cieľov, zastúpení GKGoal triedy, a pridať ich do správanie objektu. Ciele možno vytvoriť mnoho rôznych herných prvkov, napríklad:

  • smerom k agent
  • odklon od agenta
  • zoskupení blízko seba s inými látkami
  • Putovanie po konkrétnu pozíciu

Vaše správanie objekt monitoruje a vypočíta všetky ciele, ktoré pridáte k nemu a potom odovzdáva údaje späť na pôvodcu. Pozrime sa, ako to funguje v praxi.

Otvorte váš projekt Xcode a prejdite na PlayerNode.swift. Najprv musíme uistite sa, PlayerNode triedy v zhode s protokolom GKAgentDelegate.

Ďalej pridať nasledujúci kód blok do PlayerNode triedy.

Začneme pridaním vlastnosť PlayerNode triedy tak, že vždy máme odkaz na objekt agent súčasný hráč. Ďalej realizujeme dva spôsoby GKAgentDelegate protokol. Zavedením týchto metód, musíme zabezpečiť, že hráč bodka na obrazovke vždy zrkadlo tieto zmeny GameplayKit.

AgentWillUpdate(_:) metóda je volána tesne pred GameplayKit prehľadáva správanie a ciele tohto agenta zistiť, kde by sa mal pohybovať. Podobne, agentDidUpdate(_:) metóda sa nazýva rovno po GameplayKit tohto procesu.

Naša realizácia týchto dvoch metód zabezpečuje, že uzol vidíme na obrazovke odráža zmeny GameplayKit a že GameplayKit používa poslednej pozície uzla pri vykonávaní jeho výpočty.

Ďalej otvorte ContactNode.swift a obsah súboru nahradiť takto realizácie:

Zavedením protokolu GKAgentDelegate v ContactNode triede, umožňujeme pre všetky ostatné bodky v našej hre sa s GameplayKit, ako aj náš hráč dot.

Teraz je čas na nastavenie správania a cieľov. Aby to fungovalo musíme postarať sa o tri veci:

  • Pridať uzol hráčov agent svoj subjekt a nastaviť jeho delegáta.
  • Nakonfigurovať agentov, správania a cieľov pre všetky naše nepriateľské bodiek.
  • Aktualizácia všetkých týchto látok v správny čas.

Po prvé, otvorte GameScene.swift a na konci didMoveToView(_:) metóda pridať nasledujúce dva riadky kódu:

S tieto dva riadky kódu pridať agenta ako súčasť a nastaviť delegáta agent byť samotný uzol.

Potom nahraďte vykonávania initialSpawn metódy realizácie:

Najdôležitejšie kód, ktorý sme pridali sa nachádza v if vyhlásenie, ktoré vyplýva, príkaze switch. Poďme sa prejsť tento kód po riadkoch:

  • Najprv pridať zástupca subjektu ako súčasť a nakonfigurujte svojho delegáta.
  • Ďalej sme priradiť agent pozície a pridajte agenta uložené array, zástupcovia. Pridáme tento objekt do GameScene triedy v okamihu.
  • Potom vytvorte objekt GKBehavior s jednej GKGoal zamerať sa na súčasný hráč agent. Parameter váhy v tomto inicializačný výraz sa používa na určenie, aké ciele by malo mať prednosť pred ostatnými. Predstavte si napríklad, že máte za cieľ zamerať sa na špeciálne agent a cieľ sa vzdialiť od iného agenta, ale chcete zacielenia cieľ prednosť. V tomto prípade mohol dať zamerania cieľa hmotnosťou 1 a vzďaľujú cieľ hmotnosti 0,5. Toto správanie sa priradí zástupcovi nepriateľské uzol.
  • Napokon sme nakonfigurovať hmotnosť maxSpeed a maxAcceleration vlastnosti agenta. Tieto ovplyvniť, ako rýchlo objekty môžete presúvať a zase. Neváhajte a hrať sa s týmito hodnotami a vidieť, ako to ovplyvňuje pohyb nepriateľa bodky.

Ďalšie, pridajte tieto dve vlastnosti triedy GameScene:

Zástupcovia pole použije zachovať odkaz na nepriateľských agentov v scéne. Vlastnosť lastUpdateTime sa použije pre výpočet času, ktorý uplynul od scénu bol naposledy aktualizovaný.

Nakoniec, vykonávania update(_:) metódy GameScene triedy nahradiť nasledujúcich implementácie:

V metóde update(_:), môžeme vypočítať čas, ktorý uplynul od poslednej scény aktualizácia a aktualizácia agentov s touto hodnotou.

Vybudovať a spustenie aplikácie a začína sťahovanie okolo scény. Uvidíte, že nepriateľské bodky začne pomaly pohybuje smerom k vám.

Targeting enemies

Ako vidíte, kým nepriateľ bodky zacieliť súčasný hráč, nie plávať okolo bieleho bariéry, namiesto toho sa snažia presunúť cez ne. Poďme si trochu múdrejší s pathfinding nepriateľov.

2. pathfinding

GameplayKit rámec, môžete pridať komplex pathfinding svoju hru tým, že kombinuje fyziky orgánov s GameplayKit tried a metód. Na našu hru, budeme ho nastaviť tak, aby nepriateľ bodky cieľ hráč dot a zároveň navigáciu okolo prekážok.

Pathfinding v GameplayKit začína vytvárať graf vaše scény. Tento graf je kolekcia jednotlivých miest, tiež označovaná ako uzly a spoje medzi tieto miesta. Tieto pripojenia definujú, ako konkrétny objekt môžete presunúť z jedného miesta na druhé. Graf môžete model k dispozícii cesty v scéne jedným z troch spôsobov:

  • Súvislé miesto obsahujúce prekážky: Tento graf model umožňuje hladké cesty okolo prekážok z jedného miesta na druhé. Pre tento model, GKObstacleGraph trieda sa používa pre graf, GKPolygonObstacle trieda pre prekážky a GKGraphNode2D trieda pre uzly (miestach).
  • Jednoduchý 2D grid: V tomto prípade platné umiestnenia môže byť len tie s celočíselné súradnice. Tento graf model je užitočné, keď vaša scéna má odlišnú mriežku rozloženia a nepotrebujete plynulých ciest. Pri použití tohto modelu, objekty môžete pohybovať iba vodorovne alebo zvislo v jednom smere naraz. Pre tento model, GKGridGraph trieda sa používa pre graf a GKGridGraphNode trieda pre uzly.
  • Kolekcia lokalít a spojenie medzi nimi: to je najviac generické graf model a odporúča sa pre prípady, kde objekty presúvať medzi rôzne priestory, ale ich špecifické umiestnenie do tohto priestoru nie je potrebný na hranie. Pre tento model, GKGraph trieda sa používa pre graf a GKGraphNode trieda pre uzly.

Pretože chceme dot hráčov v našej hre sa pohybovať okolo bieleho prekážky, budeme používať v GKObstacleGraph triede vytvoriť graf našej scény. Ak chcete začať, nahraďte vlastnosť spawnPoints v triede GameScene takto:

SpawnPoints pole obsahuje niektoré zmenené spawn miestach pre účely tohto tutoriálu. To je preto v súčasnosti GameplayKit len vypočítať cesty medzi objekty, ktoré sú pomerne blízko seba.

Vzhľadom na veľké predvolené vzdialenosť medzi bodky v tejto hre pár nový spawn bodov sa musí pripočítať k ilustráciu pathfinding. Všimnite si, že sme tiež deklarovať objekt graf typu GKObstacleGraph zachovať odkaz na graf vytvoríme.

Ďalej pridajte nasledujúce dva riadky kódu na začiatku didMoveToView(_:) metódy:

V prvom riadku, tvoríme rad prekážok fyzika orgánov v scéne. Potom vytvorte objekt graf pomocou týchto prekážok. Parameter bufferRadius v tomto inicializačný výraz možno vynútiť objekty nie prísť v určitej vzdialenosti týchto prekážok. Tieto riadky je potrebné pridať na začiatku didMoveToView(_:) metóda, pretože graf vytvoríme je potrebné v čase, keď initialSpawn metóda sa nazýva.

Nakoniec nahraďte po zavedení initialSpawn metóda:

Začneme metódou vytvorením GKGraphNode2D objekt s predvolený prehrávač spawn súradnice. Ďalej môžeme pripojiť tento uzol grafu tak, že môže byť použitý pri hľadaní cesty.

Väčšina z initialSpawn metóda zostáva nezmenená. Pridal som nejaké pripomienky vám ukázať, kde sa nachádza pathfinding časť kódu prvý ak vyhlásenie. Poďme sa prejsť tento kód krok za krokom:

  • Vytvoriť ďalšiu inštanciu GKGraphNode2D a spojiť to do grafu.
  • Vytvárame radu uzlov, ktoré tvoria cestu tým, že volá metódu findPathFromNode(_:toNode:) na našom grafe.
  • Ak radu cestu uzlov bol úspešne vytvorený, potom vytvorte cestu od nich. Radius parameter funguje podobne ako parameter bufferRadius z pred a definuje koľko objektu môžete odísť vytvoril cestu.
  • Vytvoríme dve GKGoal objekty, jeden pre nasledujúci cestu a druhej zostať na ceste. MaxPredictionTime parameter umožňuje cieľom vypočítať čo najlepšie predstihu či niečo sa chystá prerušiť objekt z nasledujúcich/pobyt na tejto konkrétnej ceste.
  • Napokon vytvárame nové správanie týchto dvoch gólov a to priradiť agent.

Budete tiež všimnúť, že odstránime uzly vytvárame z grafu, akonáhle sme skončili s nimi. Je dobrým zvykom sledovať, ako to zaručuje, že uzly vytvorené neinterferujú s inými pathfinding výpočty neskôr.

Vybudovať a spustenie aplikácie jeden posledný čas, a uvidíte dve bodky poter veľmi blízko pri vás a začať smerom k vám. Možno budete musieť spustiť hru niekoľkokrát, ak obaja poter ako zelené bodky.

Pathfinding enemies

Dôležité!

V tomto tutoriále, sme použili GameplayKit's pathfinding funkciu povoliť nepriateľské bodky na cieľové hráč dot okolo prekážok. Všimnite si, že to bolo len pre praktický príklad pathfinding.

Pre skutočnú produkciu hry, by bolo najlepšie na realizáciu tejto funkcie kombináciou hráč zacielenia gól z v tomto tutoriále je vyhýbanie sa prekážke cieľ vytvoril metódou init(toAvoidObstacles:maxPredictionTime:) pohodlie ktorý si môžete prečítať viac o v GKGoal triede.

Záver

V tomto tutoriále som vám ukázal, ako môžete využiť agentov, ciele a správania v hrách, ktoré majú štruktúru súčasť entity. Kým sme vytvorené len tri góly v tomto tutoriále, existuje mnoho viac k dispozícii na vás, ktoré si môžete prečítať viac o v GKGoal triede.

Tiež som vám ukázal ako vykonávať niektoré pokročilé pathfinding vo vašej hre vytvorením grafu, sadu prekážky a ciele sledovať tieto cesty.

Ako vidíte, existuje obrovské množstvo funkcií, ktoré vám k dispozícii prostredníctvom rámca GameplayKit. V tretej a poslednej časti tejto série, naučím vás o GameplayKit je náhodný hodnotu generátorov a ako vytvoriť svoje vlastné pravidlo systém zaviesť nejaké fuzzy logiky do vašej hry.

Ako vždy, Nezabudnite zanechať svoje pripomienky a spätnú väzbu nižšie.

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.