IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

4. diel - Programovanie v Minecraftu - Pozíciovanie - časť II.

V minulej lekcii kurzu o programovaní v Minecraftu sme sa naučili problematiku pozicovanie a predstavili si príkazy / tp a / teleport. V dnešnom tutoriále tému dokončíme ukážkou argumentov pre selektory týkajúce sa pozícií. Je ich pomerne veľa - x, y, z, r, rm, rx, rxm, ry, rým, dx, dy, dz. Žiadny z týchto selektorov neumožňuje použiť "!" predznamenanie hodnoty.

Argumenty vzdialenostný - ra rm

Tieto selektory použijete väčšinou v kombinácii. Selektor r označuje "radius" (rádius, dosah), rm označuje "minimal radius" (minimálna rádius, minimálny dosah). Používajú sa ak hľadáte entitu v určitej blízkosti k vykonávateľmi (executorovi) príkazu, zadávate teda príslušný počet blokov (vzdialenosť). Argument r pátra po entitách v špecifikovanom dosahu, rm pátra po entitách mimo špecifikovaný dosahu.

Na ilustračnom obrázku môžete vidieť, kde bude oblasť hľadania oboch argumentov - je kruhová. Ďalej môžete vidieť, kam na jednotlivých blokoch číselne siahajú vzdialenosti - hranica celých čísel je vždy uprostred bloku v danej vzdialenosti od bloku, kde sa nachádza executor. Na obrázku som použil drevo, aby boli viac viditeľné blokové hranice.

Ukážka správanie vzdialenostných argumentov v Minecraftu - Programovanie v Minecraftu

r = 3 vyberie všetky entity v zelenej zóne, rm = 3 všetky v modrej. Samozrejme analogický kruh platí aj pre os y.

Teraz si povieme ako kombinovať selektorové argumenty dohromady. Vo zložené zátvorke sa oddeľujú čiarkou bez medzier. Selektor potom argumenty berie ako hradlo AND, teda musia byť všetky splnené, aby selektor danú entitu zvolil, teda napríklad príkaz

/say @e[name=Krepsy3,m=1]

povie meno entity len, ak sa volá "Krepsy3" a zároveň má Gamemody creative. Tejto vlastnosti možno nádherne využiť napríklad pre vybranie entít z určitého pásu, vyskúšajme si to:

/testfor @e[r=8,rm=3]

Príkaz zareaguje, pokiaľ nájde entitu aspoň 3 bloky od command bloku, v ktorom je vpísaný, ale nie ďalej, než 8 blokov od neho (tzn. Aspoň jedna entita musí v onom pásu byť).

Argumenty pozičné - x, yaz

Používajú sa ku hľadanie podľa pozície. Do každého z nich zapíšete súradnicu bloku, ktorý sa stane centrom hľadania. Je povinné vyplniť všetky 3 súradnice. Toto centrum sa potom bude správať rovnako, ako by sa na jeho súradniciach nachádzal command blok s príslušným r (resp. Rm) argumentom.

Upozornenie - Býva častou chybou napísať iba tieto tri argumenty a už neuviesť argument pre rádius. Takto to ale nefunguje a selektor bude vždy pozitívne a na zmeny pozície nebude vôbec reagovať. Ak chcete teda vybrať entitu nachádzajúci sa dva bloky od určitej súradnice, vykonáte to takto:

/testfor @e[x=-764,y=56,z=309,r=2]

Nechcem pred vami nič tajiť a preto prezradím, že vyššie uvedený príkaz možno tiež zapísať takto:

/testfor @e[-764,56,309,2]

Ak bezprostredne za "[" otváracia hranatú zátvorku zapíšete v tomto poradí argumenty x, y, z, r, môžete potom ich názvy vynechať. U žiadnych iných argumentov sa nič také nedá použiť. Ja osobne sa však väčšinou vyvarujem tomuto zápisu - ušetríte síce 8 znakov, ale mohlo by sa stať, že to v kombinácii s viacerými argumentmi nebude fungovať.

Samozrejme môžete opäť použiť techniku vybrania entít z kruhového pásu okolo špecifikovaného bloku, pomocou rm špecifikujete vnútorný obvod, pomocou r vonkajší obvod:

/testfor @e[x=-764,y=56.z=309,r=5,rm=3]

Argumenty rotačné - rx, rxm, ry a rým

Asi ste uhádli, že argumenty označujú určitú rotáciu hlavy, volajú sa presne podľa os. Písmenko m opäť reprezentuje "minimal". Ak teda chcete nájsť entitu, ktorá sa pozerá "skoro na zem", použijete

/testfor @e[rxm=80]

Ak nechcete ale aby sa pozerala úplne na zem, doplníte zápis

/testfor @e[rxm=80,rx=89]

Ďalej si ešte treba špecifikujte svetovú stranu, tá má vždy svoj rozsah 90 °. Ak si vyberiete sever, budete musieť robiť výber na dvakrát, a to kvôli prechodu medzi ry 180 ° a -180 °. Ja zvolím treba juh, s rozsahom <-45°;45°>, finálna príkaz bude:

/testfor @e[rxm=80,rx=89,rym=-45,ry=45]

A tým vyberieme entitu, ktorá sa pozerá na juh a takmer do zeme.

Vidíte, že vyberanie "pásu viditeľnosti" je plne analogické s výberom pozície.

Argumenty priestorové - dx, dy a dz

Tieto argumenty opäť využívajú centrálny blok, ktorým je buď executor alebo blok špecifikovaný argumenty x, y, z. Tieto argumenty špecifikujú kváder, z ktorého entitu vyberáme. Nespráva sa teda ako ra rm, kedy entita leží v guli okolo centrálneho bloku. Ako centrálny blok pôsobí spodnej severozápadnej roh tohto kvádra (má najnižšiu x, yiz súradnicu - do týchto argumentov totiž nie je možné zadať záporné číslo), nazvime tento blok rohom. Jednotlivými argumenty potom špecifikujete ako je kváder dlhý (po osi x od rohu - argumentom dx), široký (po osi z od rohu - argumentom dz) a vysoký (po osi y od rohu - argumentom dy). Pre ilustráciu tu opäť máte obrázok - s menovkami osí a vzdialeností, tiež môžete vidieť Osni kríž dosadený z debug screen. Celé čísla idú opäť medzi stredmi blokov:

Ukážka správanie priestorových argumentov v Minecraft - Programovanie v Minecraftu

Použil som príkaz

/testfor @e[dx=3,dy=4,dz=6]

, Ktorý vyberie všetky entity z kvádra 3x4x6 - počnúc od stredu (geometricky ťažisko) command blocku, ktorý príkaz vykonáva.

Pozor: Ak potrebujete robiť výber priestorovými či rádiovými argumenty "presne na blok", teda s použitím desatinných čísel, tak vás asi sklamem, pretože to nejde. Jedná sa bohužiaľ o obmedzení hry, cez ktoré je potrebné sa preniesť, a vyberať vždy "o ten půlblok navyše".

Precvičenie pozíciovanie

Na záver si precvičíme vedomosti z celého tretieho dielu:

  • Napíšte príkaz, ktorý teleportuje každého hráča von z miestnosti o veľkosti 5x5x5 blokov, len ak sa v nej hráč nachádza.
  • Napíšte príkaz, ktorý narovná hlavu každému hráčovi, ktorý sa pozerá do zeme či nad seba pod uhlom presahujúcim 60 ° (budete potrebovať 2 command bloky, ktoré napojíte na rovnaký redstonový signál)
  • Napíšte príkaz, ktorý teleportuje entitu Josef 2 bloky nad executora, ak sa nenachádza ďalej než 4 bloky od neho

Riešenia úloh máte k stiahnutiu spolu s ostatnými príkazmi. V budúcom dieli si doplníme nejaké chýbajúce znalosti z oblasti "mapmakerství", budú to nejaké užitočné argumenty a príkazy pre nastavovanie sveta.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 22x (533.96 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Minecraft

 

Predchádzajúci článok
Programovanie v Minecraftu - Pozíciovanie - časť I.
Všetky články v sekcii
Programovanie v Minecraftu
Preskočiť článok
(neodporúčame)
Programovanie v Minecraftu - Príkazy pre manipuláciu so svetom
Článok pre vás napísal krepsy3
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
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