Flash 5: Škola hrou III. - Grafika.cz - vše o počítačové grafice

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Webdesign

Flash 5: Škola hrou III.

1. srpna 2002, 00.00 | Pojďte s námi tvořit hry pro webový prohlížeč. Využíváme skvělý Flash v dnes nejrozšířenější verzi 5. V dnešním díle s naším autem dojedeme do cíle.

Dnes ukončíme vývoj naší první hry. Ve třech dílech jsme se pokusili vytvořit základní konstrukci, určit směr pro další vývoj. Zdrojový soubor máte k dispozici, můžete jej tedy libovolně modifikovat.


rally5.fla

Nejefektivnější způsob, jak zamezit zkracování trati, je stanovení kontrolních bodů (CHECKPOINT). V naší ukázce jsou tyto body součástí jediného objektu - ve zdrojovém souboru jej naleznete pod jménem check. Movie clip check má vlastní časovou osu s krátkými action scripty. Na některých snímcích této časové osy jsou nakresleny čtverce o velikosti přibližně šířky trati a to na různých místech trati. V ukázce jsou pro názornost tyto body viditelné. Při provádění programu se na daném úseku trati kontroluje protnutí dvou objektů - protnutí checkpointu autem. Program nebude kontrolovat další checkpoint, dokud nedojde k protnutí bodu v aktuální programové smyčce. Tímto způsobem proběhne kontrola každého checkpointu až do projetí cílem, kde bude započteno ujeté kolo.

Počítání ujetých kol je součástí MC check. První checkpoint po startu (frame 7) zvýší proměnnou lap o hodnotu 1 a zároveň zaktualizuje dynamické textové pole kolo (ve spodní části scény) - velmi jednoduché řešení. Tento checkpoint je součástí programové smyčky a jeho pozice je aktualizována každý snímek narozdíl od ostatních checkpointů. Důvodem je přesnost při měření dosaženého času. U ostatních checkpointů není nutné každý snímek provádět kontrolu a výkon procesoru je tím ušetřen.

Čas je měřen pomocí funkce getTimer(). Při načtení hry má getTimer() hodnotu 0 a každou vteřinu se zvýší o 1000 (přesně řečeno každou tisícinu vteřiny se zvýši o 1). V okamžiku, kdy se hráč rozhodne zahájit hru, pomocné proměnné time0 se přiřadí hodnota getTimer(), aby mohla být pro měření času od getTimer() odečítána.

Frame 11: aktualizace textového pole s názvem time:
time = Math.round((getTimer()-time0)/10)/100;

V případě, že proměnná lap dosáhne stanoveného limitu (v našem případě hodnoty 4), může být hra ukončena a na server odeslány příslušné proměnné k zápisu výsledků do databáze, např:

getURL ("rally2.php", "", "GET");
pro zápis a načtení další úrovně nebo

loadVariablesNum ("r_zapis.php", 0, "GET");
pro pouhý zápis bez změny URL v prohlížeči.

Pokud budete chtít provádět tyto zápisy, potřebujete pro umístění hry webhosting s podporou PHP a samozřejmě PHP scripty pro zpracování a zápis proměnných - to pro případ zápisu do souboru. Při použití většího množství dat je ideální zápis do databáze, pro který je nutný webhosting s PHP + MySQL.

Kontakt s okolními objekty jako např. jízda v písku nebo po trávě se projeví pouhou změnou parametrů jako je rychlost nebo "smykovost". Auto zkrátka v písku zpomalí a na trávě uklouzne. Při kontaktu s nějakou pevnou překážkou je však zapotřebí vzít v úvahu kromě rychlosti a směru jízdy také tvar nepohybujícího se objektu v místě nárazu např. při nárazu do svodidel (výjimku tvoří objekty typu výbušný barel - auto prostě necháme vybuchnout). Napadlo mne několik málo možností, jak srážku se svodidly řešit.

1. Vytvořit svodidla z několika objektů, u nichž budeme znát předem jejich tvar, např. svislá, vodorovná, šikmá část svodidla apod. Při kontaktu se svislou částí svodidel budeme tedy vědět, že auto nebude bržděno v ose y vůbec, ale v ose x naprosto a podle toho vytvoříme script.

2. Pokud budou svodidla tvořena jediným objektem - mnohoúhelníkem lemujícím trať, nezbude nám nic jiného, než si svodidla v místě nárazu "osahat". Poslouží nám jakési detektory nárazu, které budou rozmístěny kolem auta např. v těchto místech

tzn. pro první bod např. this._x-7 a this._y-10 (vztaženo k objektu car). Tato druhá možnost je patrně nejsložitější a pokud nechcete být otráveni nezdarem, do této možnosti se ani nepouštějte (upřímně řečeno, ani ta první není jednoduchá).

Zde naše úvahy o možnostech řešení kolizí ukončím. Jednak by nám příliš dlouho trvalo, než bychom nalezli ideální rozmístění těchto bodů a napsali program pro reakci auta při nárazu a kromě toho procesor by z našeho výtvoru dvakrát nadšen nebyl.

Podobným způsobem, jakým je tvořen MC check, lze na trať umístit různé objekty pro zpestření jízdy, např. rozlitý olej, výbušný barel apod.

Vysvětlení některých použitých příkazů action scriptu:

V objektu check lze v prvním snímku vypnout jeho viditelnost: this._visible=0;

V druhém snímku jsou souřadnice přizpůsobeny nové pozici objektu way:
this._x = _root.way._x;
this._y = _root.way._y;

a je testován kontakt s objektem car:
this.hitTest(_root.car) ? gotoAndPlay(7) : play();

Pokud došlo ke kontaktu, program pokračuje na snímku č. 7. V opačném případě je ze snímku č. 3 odeslán zpět na snímek 2.

Program se z prvního snímku objektu oil po náhodném výběru přesune na zvolený snímek vlastní časové osy MC oil a na trati se objeví olejová skvrna (pokaždé jinde). Při kontaktu s olejem se zvýší hodnota proměnné tire a auto se krásně sklouzne po oleji. Díky snímku č. 11 hlavní osy se pneumatiky pozvolna zbaví oleje.

Doporučuji prostudovat zdrojový soubor a pokud jste četli předchozí dva díly, nebudete mít s pochopením scriptů problémy.

Příště bychom se mohli pustit do něčeho nového - máte-li zájem. Podle vašeho ohlasu na minulé díly (téměř žádný) už bych toho měl asi nechat. Máte nějaký nápad? Což takhle dát si PAC-MANa? Vaše reakce očekávám v diskusi.
Na gamesy typu QUAKE raději předem zapomeňte :-).

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Go verze  

 » Rubriky  » Webdesign  

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: