Přesun objektu ve Flashi

30. července 2002

Dnešní herní článek věnujeme adventurám, vyrobíte si základ pro hru tohoto žánru. Výsledkem bude pohyb postavy k určenému bodu. Bod se určí pomocí myši, kam kliknete, tam postava půjde. Praktické uplatnění dnešního příkladu je jen na vás, určitě to nebudou jen adventury.

Příprava grafiky

Nakreslete si postavu, označte ji, převeďte ji na MC a pojmenujte POSTAVA. Nakreslete kurzor myši, který budete ve hře používat, převeďte ho na MC a pojmenujte KURZOR. A nakonec nakreslete objekt, za kterým se bude MC POSTAVA pohybovat, převeďte ho na MC a pojmenujte CIL.

Kurzor

Označte kurzor a otevřete panel Actions. Vyberte Actions | Moive Clip Control | onClipEvent a z nabídky event vyberte load, následující akce tedy proběhnou po načtení MC. Vyberte Actions | Moive Clip Control | startDrag. Do pole Target napište this, zaškrtněte políčko Expression a políčko Lock mouse to center. Tím přichytíte právě editovaný MC ke středu myši. Vyberte Objects | Moive | Mouse | Methods | hide. Tím schováte standardní kurzor myši. Vyberte Actions | Moive Clip Control | onClipEvent a z nabídky event vyberte Mouse down, následující akce tedy proběhnou vždy, když uživatel klikne na myš.

Dále musíte zajistit, aby se po kliknutí přesunul cílový bod, za kterým se MC POSTAVA pohybuje, tedy MC CIL:

  • vyberte Actions | Moive Clip Control | setProperty
  • z roletky Property vyberte _y(Y Position)
  • do pole Target napište _root.cil
  • do pole Value this._y
  • vyberte Actions | Moive Clip Control | setProperty
  • z roletky Property vyberte _x(X Position)
  • do pole Target napište _root.cil
  • do pole Value this._x

V dalším kroku musíte zjistit celkovou vzdálenost MC CIL od MC POSTAVA na ose y a x. To uděláte tak, že odečtete y souřadnici MC CIL od y souřadnice MC POSTAVA a x souřadnici MC CIL od x souřadnice MC POSTAVA. Tyto hodnoty uložíte do proměnných YCELK a XCELK.

Vyberte Actions | Miscellaneous Actions | evaluate a do řádku Expression napište _root.ycelk = _root.cil._y - _root.postava._y. Tím zjistíte vzdálenost MC CIL od OC POSTAVA na ose y. Vyberte Actions | Miscellaneous Actions | evaluate a do řádku Expression napište _root.xcelk = _root.cil._x - _root.postava._x. Tím zjistíte vzdálenost MC CIL od OC POSTAVA na ose x.

A nyní si vzpomeňte na základní školu a na Pythagorovu větu. Chcete docílit toho, aby se MC POSTAVA pohyboval každý snímek o 5 bodů přímo k MC CIL. K tomu potřebujete znát celkovou přímou vzdálenost MC POSTAVA od MC CIL. Použijte vztah c2 = a2 + b2, v tomto případě tedy c2 = ycelk*ycelk + xcelk*xcelk. A abyste se zbavili mocniny nad neznámou, dejte celý výraz za „=“ pod odmocninu. Viz obrázek:

Výsledkem má být vzdálenost na ose x a y (bude uložená v proměnných YZMENA a XZMENA), o kterou se MC každý snímek posune. Tu zjistíte tak, že celkovou přímou vzdálenost (odmocnina z výrazu ycelk*ycelk + xcelk*xcelk) vydělíte pěti a získanou hodnotu uložíte do proměnné DELIC. Touto proměnnou pak vydělíte ycelk a xcelk.

  • Vyberte Actions | Miscellaneous Actions | evaluate a do řádku Expression napište _root.delic = Math.sqrt(_root.ycelk*_root.ycelk+_root.xcelk*_root.xcelk) / 5. Tím se do proměnné DELIC vloží odmocnina výrazu _root.ycelk*_root.ycelk+_root.xcelk*_root.xcelk vydělená pěti. (sqrt je metoda objektu Math, která vypočítá druhou odmocninu).
  • Vyberte Actions | Miscellaneous Actions | evaluate a do řádku Expression napište _root.yzmena = _root.ycelk / _root.delic. Tak získáte hodnotu, o kterou se bude MC POSTAVA posouvat ve svislém směru.
  • Vyberte Actions | Miscellaneous Actions | evaluate a do řádku Expression napište _root.x = _root.xcelk / _root.delic, čímž získáte hodnotu, o kterou se bude MC POSTAVA posouvat ve vodorovném směru.

Postava

  • označte postavu a otevřete panel Actions
  • vyberte Actions | Moive Clip Control | onClipEvent a z nabídky event vyberte EnterFrame
  • vyberte tedy Actions | Conditions/Loops | if
  • vyberte Objects | Moive | MoiveClip | Methods | hit Test
  • před text v kolonce Condition napište cestu k MC CIL: _root.cil a do závorky napište this._x,this._y,true – tím testujete, zda se střed MC POSTAVA dotýká MC CIL (Za závorku ještě napište == flase, protože předsi chcete, aby následující akce probíhaly, pokud se tyto dva MC nedotýkají.)
  • vyberte Actions | Moive Clip Control | setProperty
  • z roletky Property vyberte _y(Y Position)
  • do pole Target napište this
  • do pole Value napište this._y + _root.yzmena
  • vyberte Actions | Moive Clip Control | setProperty
  • z roletky Property vyberte _x(X Position)
  • do pole Target napište this
  • do pole Value napište this._x + _root.xzmena

Zdrojový soubor si můžete stáhnout.

Související články:
Udělejte si svojí první hru ve Flashi
Simulace reálného prostředí ve Flashi

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Předchozí článek Kaskádové styly v dobrém stylu
Další článek Karel-Kopal
Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *