Skip to main content

Vytváříme hry ve Flashi (Ukázka, strana 99)

Page 1

Vytváříme hry ve Flashi

Obr. 3.11.4: Movie Clip „raketa“ je složen ze dvou dalších Movie Clipů – „testovat“ a „plameny“

Obr. 3.11.3: Ukázka umístění obrázku střely od středu objektu. Pro ilustraci je na pozadí vidět náznak umístění rakety.

Nechceme totiž, aby střela při vystřelení letěla ze středu rakety, ale přímo z jejího kanónu. Proto musíme obrázek střely uvnitř Movie Clipu posunout tak, aby začínal na špici rakety. Hotový Movie Clip „strela“ umístíme mimo aktivní plochu scény, aby střela nebyla při spuštění hry vidět. Tento Movie Clip nebude obsahovat žádné akce, protože jeho pohyb budeme řídit odjinud. Pokračujeme nakreslením raketky (měla by být natočená směrem nahoru), z níž uděláme Movie Clip pojmenovaný „raketa“. Ten umístíme doprostřed scény. Přepneme se do něj, označíme si znovu nakreslenou raketu a uděláme z ní ještě jeden Movie Clip pojmenovaný „testovat“ (obrázek 3.11.4). Ten budeme testovat při kolizi s asteroidem, protože k raketě přibudou ještě plameny (trysky), kterým srážka s asteroidem samozřejmě nevadí. Do Movie Clipu „raketa“ si nakreslíme ještě zmíněné plameny u trysek a uděláme z nich Movie Clip „plameny“, jenž se bude objevovat pokaždé, když hráč stiskne šipku nahoru, a zvýší tak rychlost letu rakety.

98

T VORBA

HER

Ukázka elektronické knihy, UID: KOS181518


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45

onClipEvent (enterFrame) { _root.strela._x += ª 15*math.sin(_root.strela._rotation*(math.pi/180)); _root.strela._y -= ª 15*math.cos(_root.strela._rotation*(math.pi/180)); if (_root.strela._x>400 or _root.strela._x<-25 or ª _root.strela._y<-25 or _root.strela._y>400) { _root.vystrel = 0; } if (Key.isDown(Key.SPACE) and _root.vystrel<1) { _root.vystrel = 1; _root.strela._visible = 1; _root.strela._rotation = _rotation; _root.strela._x = _x; _root.strela._y = _y; } if (Key.isDown(Key.RIGHT)) { if (rotace<15) { rotace += 0.6; } } if (Key.isDown(Key.LEFT)) { if (rotace>-15) { rotace -= 0.6; } } if (Key.isDown(Key.UP)) { rychlostx += math.sin(_rotation*(math.pi/180)); rychlosty += math.cos(_rotation*(math.pi/180)); plameny._visible = 1; } else { rychlostx *= 0.98; rychlosty *= 0.98; plameny._visible = 0; } if (rotace>0) { rotace -= 0.2; } if (rotace<0) { rotace += 0.2; } _rotation += rotace; speed = ª math.sqrt((rychlostx*rychlostx)+(rychlosty*rychlosty)); if (speed>10) { rychlostx *= 10/speed; rychlosty *= 10/speed; } _y -= rychlosty;

T VORBA

HER

Vytváříme hry ve Flashi

Vrátíme se zpět do hlavní scény a na raketu dáme tyto akce:

99

Ukázka elektronické knihy, UID: KOS181518


Vytváříme hry ve Flashi

46 47 48 49 50 51 52 53 54 55 56 57 58 59

_x += rychlostx; if (_y<0) { _y = 400; } if (_y>400) { _y = 0; } if (_x<0) { _x = 400; } if (_x>400) { _x = 0; } }

Druhý a třetí řádek skriptu slouží k pohybu střely, přičemž její pohyb na souřadnicích x a y vypočítáváme podle úhlu jejího natočení příkazy sin (sinus) a cos (cosinus). Střela se pohybuje rychlostí patnáct pixelů za snímek, jak je z kódu zřetelné. Rychlost střely ale samozřejmě můžete zvýšit či snížit, jen si musíte dát pozor, aby střela neletěla pomaleji než raketa a zároveň příliš rychle, aby neproletěla skrz asteroid. Rychlost pohybu střely se během hry nijak nemění. Poté, co střela zasáhne asteroid, ji jen schováme. Řádek čtyři ověřuje, zdali střela opustila obrazovku, a pokud ano, tak může hráč vystřelit další. Na řádku pět se proto proměnná „vystrel“ nastaví na hodnotu 0. Řádkem sedm ověřujeme, jestli byl stisknut mezerník, a jestli není na obrazovce jiná střela. Pokud ne, provede se její nové vystřelení. Na řádku devět zviditelníme Movie Clip se střelou, který mohl být předtím skrytý (pokud střela zasáhne asteroid, tak se stane neviditelná), natočíme ho ve směru rakety (řádek deset) a umístíme na pozici rakety, odkud střela vyjde (řádky jedenáct a dvanáct). Pokračujeme řádkem čtrnáct, který zjišťuje stisknutí klávesy se šipkou doprava. Je-li stisknuta, tak se zároveň ověří, jestli se raketa neotáčí příliš rychle (řádek patnáct), a pokud ne, tak zvětšíme proměnnou „rotace“ o 0,6 (hodnotu můžete zvolit libovolnou – čím vyšší, tím rychlejší otáčení). Proč ale neotáčíme přímo raketou? Protože chceme docílit toho, aby i při otáčení měla setrvačnost, a při puštění šipky do strany, se stále otáčela, až se pomalu zastaví. Také změna směru nebude okamžitá a hra bude působit reálněji. Ta samá akce, ale pro otáčení směrem doleva, je na řádcích devatenáct až dvacet tři. Řádkem dvacet čtyři zjistíme, jestli byla stisknuta šipka nahoru. Pokud ano, zvýšíme rychlost rakety ve směru x a y maximálně o 1 pixel (výpočet podle rovnice na řádcích dvacet pět a dvacet šest) a zobrazíme plameny u trysek rakety (řádek dvacet sedm). Není-li ale šipka dopředu stisknuta, raketa začne postupně zpomalovat (řádky dvacet devět a třicet) a plameny zmizí (řádek třicet jedna). Na řádcích třicet tři až třicet osm program ověřuje, zdali raketa rotuje kolem své osy. Pokud ano, tak se postupně snižuje její rychlost rotace, až úplně zastaví. Řádek třicet devět už přímo provádí rotaci rakety podle proměnné „rotace“. Na řádku čtyřicet spočítáme, jaká je velikost rychlosti podle přepony v ose x a y, pomocí Pythagorovy věty. Řádky čtyřicet jedna až čtyřicet čtyři fungují jako omezovač rychlosti, tj. pokud přepona rychlostí v obou směrech přesáhne hodnotu 10, tak obě rychlosti snížíme.

100

T VORBA

HER

Ukázka elektronické knihy, UID: KOS181518


Turn static files into dynamic content formats.

Create a flipbook