Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 3 - Programování v Minecraftu - Pozicování - část I.

V minulé lekci kurzu o programování v Minecraftu jsme se věnovali selektorovým argumentům. Dnes pokročíme dále a ukážeme si způsob pozicování entit (souřadnicový systém) - příkazy /tp a /teleport a s tím související selektorové argumenty (v 2. části). Začneme teoreticky, poté se podíváme na spoustu využitelných příkladů.

Souřadnicový systém

Začneme stisknutím klávesy F3 (pokud jste si v nastavení klávesy změnili, bude to samozřejmě jiná klávesa - já osobně bych vám ale nedoporučoval měnit přiřazení F-kláves, akorát si komplikujete život). Klávesa otevře tzv. debug screen (debugovací obrazovku - programátoři debugging jistě důvěrně znají ;) ). Na ní se zobrazuje spousta zajímavých informací, jako je biom či informace o entitách. Vás nyní bude zajímat levý sloupec, položky „XYZ:“(1) a „Facing:“(2).

Ukázka debug screen s pozicemi a osním křížem v Minecraftu. - Programování v Minecraftu

Pozice v prostoru

Zaměřme se na XYZ:. Tato položka obsahuje vaše současné souřadnice (hráč je vysoký 2 bloky (resp. 1,8 bloku), za místo, kde se hráč nachází, se považuje blok, ve kterém jsou nohy, čili ten spodní). Tyto souřadnice jsou určeny třemi osami - X, Y a Z, protože se jedná o 3D prostor. Když máte debug screen otevřenou, místo kurzoru vidíte osový kříž (3).

V prostoru se můžete nacházet prakticky kde chcete, ovšem ani minecraftový svět není nekonečný. Výškový stavební limit je 256 bloků, na osách x a z je to 60 000 000 bloků. Stavět tedy můžete mezi souřadnicemi -30000000 0 -30000000 až 30000000 256 30000000. Na úrovni (osa y) 0 se nachází spodní bedrock, nad 256 se můžete pohybovat, ale při pokusu o postavení bloku dostanete chybovou hlášku do chatu. Na obou horizontálních osách naopak najdete tzv. „World border“ (hranici světa), přes kterou se nelze dostat.

Zajímavost: Situace v rozích a na okrajích mapy byla poměrně zajímavá, v dnešní době již neexistují dva fenomény, které dříve postihovaly bloky vygenerované daleko od středu mapy (souřadnice 0 128 0). První oprava přišla ve verzi Beta 1.8 (kdy zmizely „Far Lands“, viz. http://minecraft.gamepedia.com/Far_Lands) a druhá ve verzi 1.8 (to přibyla zmiňovaná hranice, viz. http://minecraft.gamepedia.com/World_border a tím se vyřešil problém „fake chunks“ (nepravých chunků, o chuncích více níže), viz. http://minecraft.gamepedia.com/World_boundary).

Svět není tvořen pouze jednotlivými kostkami, ale kostky jsou spojovány do větších celků. Těmto celkům se říká „chunky“ [čanky], jejich rozměr je 16x256x16 bloků. Používají se při načítání světa, updatování bloků, simulace pohybu entit - vše se odehrává v rámci daného chunku. Dále ještě existují úplně speciální chunky, říká se jim "spawn chunky". Je to oblast 12x12 chunků, která je hrou stále načtena (ostatní chunky se vypínají a zapínají podle toho, zdali je v nich hráč či ne). Tyto chunky mají speciální využití, my se jimi zatím zabývat nebudeme, ale zájemce odkáži opět na wiki: http://minecraft.gamepedia.com/Spawn_chunk.

Směr pohledu

Druhá položka na debug screenu je "Facing:". Má dvě části, v první z nich se ukazuje, na kterou světovou stranu se momentálně díváte, a v závorce je uvedeno, které z horizontálních os to odpovídá. Jsou tedy celkem čtyři:

  • 0 - East (východ) - osa x+
  • 1 - South (jih) - osa z+
  • 2 - West (západ) - osa x-
  • 3 - North (sever) - osa z-

Když se tedy z bloku 0 64 0 vydáte přímo na sever, bude se postupně více a více do mínusu odečítat pozice na ose x, ostatní osy budou stále na stejném čísle.

Druhá část řádku nám ukazuje dvě další souřadnice, známé jako "ry" a "rx" (v tomto pořadí). Je to rotace pohledu, tedy směr, kam se díváte. Jak vidíte, neexistuje žádné "rz", to proto, že nemůžete naklonit hlavu na stranu („přitisknout si ji na rameno“). Pojďme si říci, který směr každá z os reprezentuje. Pro ty z vás, kteří znají hledání na mapě či glóbu podle severní šířky a východní délky to nebude problém, pro ty, kteří ne, by to mohlo být trochu divné, protože osy jsou "jakoby obráceně", hned uvidíte proč.

Prase se zapnutým hitboxem pro demonstraci os pohledu v Minecraftu. - Programování v Minecraftu

Jak vidíte na tomto praseti, u kterého jsem nechal vykreslit hitbox (jednou si povíme jak), což je pomůcka určující "tvar" dané entity - určuje, kudy může projít, kam ji můžeme zasáhnout..., má kolem sebe takový červený čtverec (z hlediska pohledu se jedná o kruh, ale takto to je kvůli hitboxu) a z očí mu vychází modrá čára, ta ukazuje, kam se prase dívá.

Když se bude modrá čára (tzn. směr pohledu) pohybovat horizontálně, tedy po červeném kruhu, bude se měnit "ry". To je proto, že měníme "natočení" osy y pohledu - měníme jej "v rámci" osy x, protože se po ní pohybujeme. Obdobně, pokud pohybujeme modrou čarou vertikálně, tedy kolmo na červený kruh, bude se měnit "rx" – protože měníme natočení osy x pohledu, a to na ose y, po níž se pohybujeme. Osa rx má rozsah od -90 (díváme se přímo nad sebe) do 90 (díváme se přímo do země). Osa ry má rozsah od -180 do 180, přechod mezi hodnotami je na severu a jihu.

Příkazy /tp a /teleport

Nyní se již podíváme na to zábavné a to na příkazy pro teleportaci. Máme je celkem dva, /teleport přibyl až nedávno, ve verzi 1.10, ale přinesl velkou revoluci. Začneme však starším příkazem, který je ve hře prakticky od doby vzniku serverů, příkazem /tp. Syntaxe je následující:

/tp <entita> <<cílová entita>|<souřadnice <x, y, z> [ry, rx]>

Jak vidíte, v zápisu syntaxe nám přibyl symbol "|" - zarážka, ta značí, že použijete buď jeden, nebo druhý argument. V tomto případě je v druhém argumentu ten, který označuje cílovou destinaci pro entitu z prvního argumentu. Tato destinace je buď jiná entita (specifikujete selektorem) nebo souřadnice. Pokud určujete souřadnice, povinné jsou pouze x, y a z, pokud nedosadíte ry a rx, budete se dívat stejným směrem, jako před teleportací.

Nyní teleportujeme naše prase Josef k sobě. Použijeme k tomu znalosti z minulého dílu:

/tp @e[name=Josef] Krepsy3

Ještě teleportujeme prase zpět do ohrádky. Otevřete si debug screen a doleťte si do ohrady. Podívejte se (aby se označil) na blok tvořící podlahu ohrádky. V levém bloku přibude řádek "Looking at:" (dívám se na).

Vidíte, že zobrazuje souřadnice bloku označeného kurzorem. Pokud bychom prase teleportovali do tohoto bloku, zabili bychom jej, protože obdobně jako u hráče je při teleportaci entit použit dolní blok, který entita zabírá, a je teleportován do prostor cílového bloku. Přičteme tedy k y-souřadnici jeden blok a aplikujeme:

/tp @e[name=Josef] -773 56 333

(ve vašem světě se souřadnice budou samozřejmě lišit)

Relativní pozice a rozdíly příkazů

Zkuste nyní provést následující příkaz (stůjte při tom na zemi):

/tp @e ~1 ~2 ~

Obě prasata a vy jste vyskočili dva bloky do vzduchu a jeden blok na jih. Použili jsme totiž relativní souřadnici. Tedy nás příkaz teleportoval o 1 blok dopředu na ose x oproti původní souřadnici, o 2 bloky nahoru na ose y oproti původní souřadnici a o 0 bloků na ose z oproti původní souřadnici. Jak vidíte, provedli jsme to pomocí znaku "~" tilda. Můžeme tedy udělat např. otáčení či pohybování:

/tp @e ~ ~ ~ ~ ~5
/tp @e ~-0.3 ~ ~0.3

Napojíte-li výše zmíněné příkazy na redstone obvod "clock", dostanete postupné otáčení či diagonální pohyb vpřed. Pamatujte: Nenastavujte hodiny příliš rychle, ať jste schopni je včas vypnout.

Nyní si ukážeme rozdíl mezi příkazy. Nejprve syntaxe /teleport:

/teleport <entita> <souřadnice <x, y, z> [ry, rx]>

Jak vidíte, /teleport již neumožňuje teleportaci na objekt, ale pouze na souřadnice. Pokud zadáte absolutní souřadnice, nepoznáte rozdíl, ten nastává s relativním pozicováním (~). Jak víte /tp bral relativní souřadnice podle původní lokality cílové entity. Zkuste ale do command bloku napsat:

/teleport @e ~ ~1 ~

Všechny entity skončí na command bloku. /teleport tedy bere relativní pozici vykonatele (executora – viz. díl o příkazu /execute), což znamená, že entity teleportuje relativně vůči sobě. To nám dává obrovský potenciál, např. můžeme nad hráče teleportovat kočku, aby ji měl na hlavě :) O tom však jindy, protože na podobné věci nemáme zatím potřebné znalosti. My zatím vyzkoušíme příklad výše, proveďte zmíněný příkaz vy (v chatu). Sami povyskočíte jeden blok a prasata budete mít v ten moment "v hlavě".

To by bylo vše pro první část pozicování, ve druhé se podíváme na selektorové argumenty související s pozicováním, je jich poměrně dost - x, y, z, r, rm, rx, rxm, ry, rym, dx, dy, dz - takže se máte na co těšit. Svět máte jako obvykle ke stažení níže.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 19x (510.63 kB)
Aplikace je včetně zdrojových kódů v jazyce Minecraft

 

Předchozí článek
Programování v Minecraftu - Selektorové argumenty, entity
Všechny články v sekci
Programování v Minecraftu
Přeskočit článek
(nedoporučujeme)
Programování v Minecraftu - Pozicování - část II.
Článek pro vás napsal krepsy3
Avatar
Uživatelské hodnocení:
6 hlasů
Autor se učí programovat zde na itnetworku, zatím zejména jazyk C#. Znalosti chce mít ucelené, proto při vývoji aplikací studuje potřebné funkce do hloubky. Vyzná se v programování ve hrách, jako je Minecraft či Ricochet.
Aktivity