Flash Help
Flash
ActionScript
Příklady





Webmaster

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


W3C Validita

      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;

}

Vysvětlení použitých goniometrických funkcí


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í:

rad=(PI*deg/180)

  • Poslední věc, kterou je třeba udělat, je přičíst hodnoty xmove a ymove k souřadnicím _x a _y


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
prohlédnout


Stáhnout
stáhnout [25 kB]






Nahoru

Copyright © Martin Hozík - All rights reserved.
Flash are registered trademark of Macromedia Inc.