Martin Hozík
hozikm@seznam.cz
ICQ: 323756613

HTML 4.0 validní
|
Ovládání autíčka
Velký počet Flashových her je na motivy automobilových závodů. Základním
stavebním kamenem je samozřejmě auto. To se dnes naučíme ovládat.
Nejprve si vytvoříme MovieClip, který bude představovat ovládané auto
a nazveme jej třeba "car". Auto samozřejmě bude zobrazeno z ptačí
perspektivy.
MovieClipu "car" poté definujte všechny následující příkazy:
Použijeme událost "Enter Frame". Ta znamená, že všechny příkazy
uvnitř budou vykonávány v každém snímku MovieClipu (i když je třeba jen
jeden). Pro ty méně chápavé: příkazy se budou provádět pořád dokola podle
rychlosti framerate animace.
onClipEvent (enterFrame) {
Dále vytvoříme 2 hlavní podmínky pro stisk levé a pravé šipky. Po stisknutí
šipky se automobil otočí o určitý počet stupňů a to změnou atributu _rotation.
Jelikož otáčíme MovieClip z něho samého, není třeba psát cestu (z hlavní
osy by to muselo být takto: car._rotation). Pokud bychom ovládali
tank, stačilo by napsat jen ten jeden příkaz, my však jezdíme s autem (v
klidovém stavu se nemůže otáčet) a tak je třeba přidat ještě podmínky,
které upravují rotaci podle rychlosti.
if (Key.isDown(Key.LEFT)) {
if (Math.abs(speed)>=0.2 & Math.abs(speed)<=1) {
_rotation -= 1;
} else if (Math.abs(speed)>1 & Math.abs(speed)<=2) {
_rotation -= 2;
} else if (Math.abs(speed)>2 & Math.abs(speed)<=3) {
_rotation -= 3;
} else if (Math.abs(speed)>3) {
_rotation -= 6;
}
}
if (Key.isDown(Key.RIGHT)) {
if (Math.abs(speed)>=0.2 & Math.abs(speed)<=1) {
_rotation += 1;
} else if (Math.abs(speed)>1 & Math.abs(speed)<=2) {
_rotation += 2;
} else if (Math.abs(speed)>2 & Math.abs(speed)<=3) {
_rotation += 3;
} else if (Math.abs(speed)>3) {
_rotation += 8;
}
}
Další podmínka kontroluje stisk šipek nahoru a dolů (zrychlování a
brždění). Zde se po stisku patřičné šipky buď zvýší nebo sníží hodnota
proměnné "speed". Povšimněte si, že když proměnná "speed"
dosáhne 20, už se dál nezvyšuje, stejně tak, když je rovna -10 (zpátečka),
už se dál nesnižuje.
if (Key.isDown(Key.UP) & speed<20) {
speed += 1;
} else if (Key.isDown(Key.DOWN) & speed>-10) {
speed -= 1;
Pokud bychom to nechali takto, auto by na neutrál drželo pořád svou
rychlost. To je samozřejmě nereálné, a proto je nutné, pokud není zmáčknut
plyn (šipka nahoru), postupně snižovat rychlost až na nulu.
} else {
if (speed>0.5) {
speed -= 0.3;
} else if (speed<-0.5) {
speed += 1;
} else {
speed = 0;
}
}
Tak a nakonec jsme se dostali k tomu nejdůležitějšímu, samotný pohyb
auta. Co následující 4 řádky dělají? Jednoduše mění každý snímek pozici (_x
a _y) MovieClipu "auto". Nechci vám sahat do svědomí, ale věřím, že
některé z vás polil studený pot při pohledu na goniometrické funkce
sinus a cosinus. Pro ty méně matematicky nadané jsem proto
nakreslil následující obrázek:
xmove = Math.cos((_rotation-90)*(Math.PI/180))*speed;
ymove = Math.sin((_rotation-90)*(Math.PI/180))*speed;
_x += xmove;
_y += ymove;
}
Jak známo, sinus je v pravoúhlém trojúhelníku definován jako protilehlá
odvěsna ku přeponě a cosinus jako přilehlá odvěsna ku přeponě.
Snad jen dodám, že do goniometrických funkcí se ve Flashi úhly dosazují
vždy v radiánech. V jednotkové kružnici platí:

Příště vás naučím, jak vytvořit závodní dráhu, brzdicí zóny s pískem,
stěny s pneumatik a další.

prohlédnout
 stáhnout [25 kB]
|