Movieclip (tirami per il naso)

Per questo lavoro la cosa importante è, oltre a stabilire le dimensioni del filmato preparare tutti gli elementi che si devono muovere come Clip filmato (Movieclip) singoli e separati tra loro. L’ombra, la testa, gli occhi, i baffi ecc.
La cosa importante è che tutti quanti gli elementi condividano il medesimo centro. Per praticità prima ho creato le Clip filmato poi ho preso come riferimento il centro della clip “naso” che poi è quella che comanderà gli spostamenti tramite un “drag” (spostamento). Su questo centro ho tracciato con le guide una croce per avere appunto un punto centrale di referenza. Dopodiché ho iniziato a posizionare ogni elemento ciascuno su un livello separato, ombra nel livello ombra, testa nel livello testa e cosi via (il livello superiore deve essere quello del naso). Man mano che posizionavo ogni elemento, entravo in modalità edita in posizione (con un doppio click sulla clip) e facevo combaciare il centro della clip dell’elemento a cui stavo lavorando con il mio centro di riferimento (lo stesso di quello della clip naso). In seguito selezionavo l’oggetto di questa clip (che si trovava "fuori posto" graficamente parlando) e con i tasti freccia lo spostavo fino alla posizione adeguata per la grafica complessiva.

Dopo tutto questo lavoraccio dobbiamo dare un nome istanza a tutti queste clip.

La clip naso, quella che dobbiamo trascinare, dovremmo renderla “draggabile” per fare ciò clicchiamo 2 volte per entrare dentro la clip in modalità edita in posizione, selezioniamo l’immagine e quindi facciamo F8 per convertirla in un simbolo “Pulsante”. Su questo pulsante inseriamo il seguente codice:

on (press) {
this.startDrag();
}
on (release, releaseOutside) {
this.stopDrag();
}

Fatto questo usciamo dalla modalità edita in posizione posizioniamoci sulla timeline del nostro filmato principale. Per l’oggetto naso adesso abbiamo una immagine "naso" dentro un pulsante che a sua volta si trova dentro una Clip filmato.

Adesso, dopo che abbiamo sistemato tutti gli elementi sui vari livelli e abbiamo dato il nome istanze a ciascuna clip iniziamo a inserire codice. Inserite su tutte le Clip filmato queste righe di codice:

onClipEvent (enterFrame) {
ratio = .2;
friction = .5;
targetx = _root.naso._x;
targety = _root.naso._y;
speedx = ((targetx-_x)*ratio)+(speedx*friction);
speedy = ((targety-_y)*ratio)+(speedy*friction);
_x += speedx;
_y += speedy; }

Tralascio di spiegare dettagliatamente il codice, vi dico soltanto che le stringhe che dovremmo cambiare più in là sono:

ratio = .2;
friction = .5;


che ci permettono di controllare la fluidità ed il tipo di arresto del movimento di tutti gli elementi e

tagx = _root.naso._x;
tagy = _root.naso._y;

che ci permetterà di relazionare ed impostare il movimento di ciascun elemento rispetto ad un altro elemento. Mi spiego: scrivete le righe di codici su tutte le Clip e provate il vostro filmato. Se draggate il naso tutti gli elementi si sposteranno per piazzarsi in corrispondenza del centro della Clip “naso”. Avrete una sensazione di movimento brusco, uguale.

Adesso provate a cambiare su ciascuna Clip filmato le seguenti righe:

tagx = _root.naso._x;
tagy = _root.naso._y,

sostituendo naso con il nome istanza della clip che sta sul livello superiore. Esempio: Sulla Clip “ombra” inserite:

tagx = _root.testa._x;
tagy = _root.testa._y,

sulla Clip “testa”

tagx = _root.baffi._x;
tagy = _root.baffi._y,

sulle Clip “baffi”

tagx = _root.occhiali._x;
tagy = _root.occhiali._y,

ecc. ecc.

Questo fa si che, draggando il naso, la Clip occhiali si sposti relazionandosi con “naso", quella dei baffi imposta il suo movimento sulla clip "occhiali" e così via fino all’ultima clip.
Questo ci permette di avere un movimento più dolce, più fluido.

Provate adesso a giostrare con i valori delle variabili ratio e friction (mai superiori a 1).

Volendo, con alcune alterazioni al codice, possiamo anche apportare alcune migliorie. Un esempio potrebbe essere rendere la testa del gatto sensibile ad un evento come il click del pulsante del mouse.

Per fare ciò basta selezionare la Clip filmato del naso, (usiamo questa clip perché l’abbiamo individuata come la clip maestra, quella che tutte le altre clip seguono), ed inseriamo il seguente codice:

onClipEvent (enterFrame) {
ratio =.1;
friction =.5;

if (mouseaction){
targetx = _root._xmouse;
targety = _root._ymouse;
speedx = ((targetx-_x)*ratio)+(speedx*friction);
speedy = ((targety-_y)*ratio)+(speedy*friction);
_x += speedx;
_y += speedy;
}
}
onClipEvent(mouseDown){
this.mouseaction=true;
}
onClipEvent(mouseUp){
this.mouseaction=false;
}


Il codice è praticamente uguale usato per le altre clip solo che le variabili “tagx” e “tagy” che poi in pratica individuano la posizione finale dove si dovrà spostare la clip non fa riferimento ad un'altra clip bensì alla posizione del mouse nella scena.

In pratica il Metacode agisce più o meno cosi:

Ad ogni evento frame Flash controlla se la condizione “mouseaction” è vera o falsa.
Se è falsa nulla accade, se invece avviene un evento “mouseDown” la condizione passa a vera ed esegue il codice della condizione che posiziona la clip “naso” sulle coordinate del mouse (e ovviamente tutte le altre clip si mettono in movimento seguendo il proprio codice)
L’evento “mouseUp” serve a riportare la condizione su false per fare si che la clip naso si fermi.


Adesso se provate il vostro filmato cliccate su una zona del vostro scenario e guardate cosa succede.Un'altra miglioria al codice potrebbe essere usare le variabili “friction” e “ratio” come variabili condivise da tutte le clip. La differenza sta nel fatto che se volete “giocare” con i valori adesso dovete cambiare questo valori su tutte le clip ed invece con questa modifica basta cambiare questi stessi valori su le 2 variabili condivise da tutte.

Allora, create un livello e chiamatelo “actions”, selezionate il frame di questo livello sulla linea temporale ed inserite il seguente codice:


stop();
rootratio=.2;
rootfriction=.5;

Adesso su ciascuna Clip filmato cambiate il codice


ratio=.2;
friction=.5;


in


ratio = _root.rootratio;
friction = _root.rootfriction;

così le variabili ratio e friction le clip prendono i valori delle variabili “globali” che abbiamo posizionato sul frame della timeline. Adesso provando a variare i valori di rootratio e rootfriction possiamo influenzare il movimento di tutte le clip.

Scarica i file .fla di questa guida.

Questo ovviamente può essere applicato a qualsiasi cosa. Per dubbi o ulteriori spiegazioni sono sempre disponibile. Il prossimo tutorial sarà su come dare un uso “utile” a questo codice creando un Menu verticale che si possa spostare da una parte ad un'altra.

Questo tutorial è stato creato da GnoKy per Pastrugni – Dicembre 2003

Utenti on-line 1
© Copyright 2002-2005 Davide Ariata & Ilaria Ferraresso - Tutti i diritti riservati