Tutorial 6 - Animació amb ActionScript 3.0

Pas 11 de 19

De moment tindrem la funció wind com s’indica a continuació:

function wind(e:Event):void
{
    cloud1_mc.x += 1;
}

Provem la pel·lícula per comprovar com es desplaça el núvol cap a la dreta, mentre encara es pot arrossegar. Podem provar amb diferents valors fins a trobar una velocitat que ens sembli adequada (per exemple 0.4).

Si mantenim premut el núvol per arrossegar-lo però no deixem anar el ratolí, el núvol continuarà avançant cap a la dreta fora del ratolí. Encara que després deixem anar el ratolí, l'esdeveniment MOUSE_UP ja no es produirà, ja que significa aixecar el botó del ratolí damunt del núvol (no fora d'aquest). D'aquesta manera ja no podrem deixar anar l'arrossegament del núvol.

Per a solucionar-ho podem associar a la funció drop un altre esdeveniment de ratolí anomenat ROLL_OUT, que significa prémer el núvol però que el ratolí s'arrossegui fora d'ell. Podem crear el nou esdeveniment sota l'esdeveniment MOUSE_UP.

Per ara els listeners que hem creat seran els següents:

cloud1_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag);
cloud1_mc.addEventListener(MouseEvent.MOUSE_UP, drop);
cloud1_mc.addEventListener(MouseEvent.ROLL_OUT, drop);
cloud1_mc.addEventListener(Event.ENTER_FRAME, wind);

En aquest cas no cal que creem una funció nova, ja que aquest listener cridarà la mateixa funció drop que havíem creat abans.

Si provem la pel·lícula veurem que si en algun moment deixem d’arrossegar el núvol, aquest acabarà per desaparèixer per la part dreta de l’escenari. Encara que deixi de visualitzar-se, la instància continuarà executant el codi.

El següent que programarem serà que quan hagi desaparegut per la part dreta, torni a aparèixer per la part esquerra de l’escenari.

Per fer-ho, introduirem una sentència condicional dins de la funció wind, de tal manera que, si es compleixen uns determinats requisits, el núvol es posicioni en la part esquerra de l'escenari.