Autíčko

V této lekci se naučíme řídit autíčko kurzorovými šipkami. Pokud se autíčko v .swf ukázce po stisku kurozorových kláves nehýbe, je potřeba alespoň kliknout do prostoru "závodní dráhy".

Možná nejtěžší bude najít pořádný závodnický speciál a případně ho upravit:-) (vhodné by mohly být obrázky formátu .gif nebo .png, které mohou mít průhlednou některou barvu), pokud chceme použít následující skript bez úprav, mělo by autíčko být otočené nahoru. Vybraný obrázek potom naimportujeme (File - Import) a zkonvertujeme na Movie Clip. Důležité pro jeho další fungování bude pojmenování instance (Instance Name v Properties), v této lekci bude použitý název auticko.
Pokud budete přidávat další obrázky (alespoň třeba startovní a cílový "rošt"), budou "výše" ty později přidávané (novější) objekty, pokud jejich pořadí chcete měnit (aby třeba auto nepodjíždělo pod rošty), můžete využít nabídku Modify - Arrange.

Script pro ovládání autíčka už je složitější než v minulých lekcích, všimněte si, že ve složených závorkách jsou zapsané příkazy, které se mají vykonat, pokud dojde k nějaké události daného klipu onClipEvent.

onClipEvent (load) {
rychlost = 0;
}

První událostí, která u každého klipu proběhne, je jeho načtení - onClipEvent(load). V našem případě při prvním načtení klipu uložíme do proměnné rychlost hodnotu 0 (příkaz je ukončen středníkem).

Další využitá událost v použitém skriptu je onClipEvent(enterFrame), ta nastane při každém zobrazení daného klipu, čili pokud jste neměnili Frame Rate, potom proběhne 12x za vteřinu. V této části skriptu (je už delší, můžete na ni mrknout pod text) se využívá příkaz if (jestliže), známý i z jiných programovacích jazyků. Příkaz obsahuje nějakou podmínku a také příkazy ve složené závorce, které se vykonají, pokud je podmínka splněná.
if (Key.isDown(Key.UP)) {rychlost += 2;}
Tento příkaz kontroluje, jestli je stisknutá klávesa (if Key.isDown), a to klávesa šipka nahoru (Key.UP). (Některé klávesy, jako třeba kurzorové šipky, mají v Action scriptu svoje speciální názvy, pro ostatní bychom mohli použít jejich kódy - později také využijeme.) Jestliže je stisknutá šipka nahoru, potom se vykoná příkaz ve složené závorce: rychlost += 2;
Tento zápis je zkráceným zápisem příkazu rychlost = rychlost + 2, který zvětšuje proměnnou rychlost o 2. Do proměnné rychlost byla při načtení klipu uložena hodnota 0, nyní při každém stisku šipky nahoru dojde k jejímu zvětšení o 2.
Podobná je část skriptu pro stisk šipky dolů, jen se rychlost zmenšuje.
Další příkaz skriptu obsahuje složenou podmínku:
if (Key.isDown(Key.LEFT) && Math.abs(rychlost)>0.2) {this._rotation -= 10; }
V závorce za příkazem if jsou dvě podmínky - Key.isDown(Key.LEFT) && Math.abs(rychlost)>0.2 spojené spojkou && (and, a současně). V tomto případě se příkaz vykoná, jestliže jsou splněné obě podmínky zároveň. Matematická funkce Math.abs určuje absolutní hodnotu z čísla nebo proměnné v závorce, v našem případě z hodnoty proměnné rychlost (může být i záporná). Suma sumárum, jestliže je stisknutá klávesa šipka doleva a zároveň je absolutní hodnota rychlosti větší než 0,2 (autíčko nestojí, pohybuje se aspoň malou rychlostí), potom se vykoná příkaz ve složené závorce:
this._rotation -= 10;
this znamená "tento objekt", za tečkou se může odkazovat na různé vlastnosti objektu, v tomto případě na systémovou proměnnou _rotation, ve které je uložený úhel otočení objektu, tato proměnná se zmenší o 10 (proti směru hodinových ručiček).
Poslední dva příkazy skriptu vypočítávají nové souřadnice objektu na základě hodnot proměnných rychlost a _rotation:
this._x = this._x+Math.sin(_rotation*(Math.PI/180))*rychlost;
V systémové proměnné _x je uložena x-ová souřadnice objektu (jeho středu), pomocí matematické funkce sinus (pokud ještě z matematiky neznáte, brzy ji poznáte:-) ) se vypočítá posunutí objektu ve směru osy x (vodorovné) v závislosti na úhlu otočení a rychlosti (Math.PI/180 převádí stupně a radiány).

Doufám, že alespoň části skriptu vám byly jasné, teprve s další praxí vám bude všechno srozumitelnější:-) Můžete počítat s tím, že u jiných flashových "hříček" jsou potřebné skripty mnohem a mnohem složitější:-)

Kompletní skript pro řízení autíčka (vložte do objektu auticko) by mohl vypadat takto:
onClipEvent (load) {
rychlost = 0;
}

onClipEvent (enterFrame) {
if (Key.isDown(Key.UP)) {
rychlost += 2;
}
if (Key.isDown(Key.DOWN)) {
rychlost -= 2;
}
if (Key.isDown(Key.LEFT) && Math.abs(rychlost)>0.2) {
this._rotation -= 10;
}
if (Key.isDown(Key.RIGHT) && Math.abs(rychlost)>0.2) {
this._rotation += 10;
}

this._x = this._x+Math.sin(_rotation*(Math.PI/180))*rychlost;
this._y = this._y+Math.cos(_rotation*(Math.PI/180))*rychlost*(-1);
}


Úkoly (4 body):

Připravte pojízdné autíčko podle textu lekce. Zkuste měnit hodnoty obsažené ve skriptu, abyste lépe pochopili jeho fungování. Doplňte nějaké další obrázky, alespoň podle ukázky.