Quadratini
In una delle sezioni precedenti, abbiamo inserito 3 istanze del movieclip base nel layer "quadratini" di suono.fla,
chiamandole quad1, quad2, quad3. Associamo ai tre movieclip questo stesso script:
onClipEvent (load) {
coloreCornice = new Color(cornice);
coloreRettangolo = new Color(rettangolo);
coloreCornice.setRGB( 0x000000 );
coloreRettangolo.setRGB( 0x666666 );
meta = 660;
frame = 10;
}
onClipEvent(enterFrame){
if(!fermo){
if (Math.abs(meta-_x) < 5) {
meta = random(400) + 300;
}
}
_x += (meta - _x)/frame;
}
Nella prima parte, sottoposta al load, settiamo il colore del quadratino: questo formato dal movieclip base, che al suo interno
contiene il movieclip rettangolo e il movieclip cornice. Creiamo una istanza dell'oggetto Color associata a ciascuno dei
due, e tingiamo rispettivamente la prima di grigio, e la seconda di nero.
Quindi, settiamo la variabile meta uguale 660 (sarà il primo punto in cui andranno i quadratini), e la variabile frame uguale a
10.
Abbiamo già visto la formula seguente (qui in versione ridotta): si tratta del moto uniformemente decelerato. La meta, o punto finale, viene
deciso in maniera random (all'interno di un determinato intervallo). Quando si verifica la condizione dell'if, allora viene stabilita
una nuova meta. La condizione è verificata quando la posizione dell'oggetto a meno di 5 pixel dal punto che era stato definito come meta
nel richiamo precedente.
Inoltre, tutto il processo di spostamento è soggetto alla variabile fermo, che deve essere falsa:
// al caricamento del movieclip
onClipEvent (load) {
// crea un'istanza dell'oggetto Color associata a "cornice
coloreCornice = new Color(cornice);
// crea un'istanza dell'oggetto Color associata a "rettangolo"
coloreRettangolo = new Color(rettangolo);
// tingi l'istanza (di nome coloreCornice) di nero
coloreCornice.setRGB( 0x000000 );
// tingi l'istanza (di nome coloreRettangolo) di grigio scuro
coloreRettangolo.setRGB( 0x666666 );
// come prima meta setta 660
meta = 660;
// dai a "frame" il valore 10 (è il "tempo" di spostamento)
frame = 10;
}
// ad ogni riproduzione del movieclip
onClipEvent(enterFrame){
// se la variabile "fermo" è falsa
if(!fermo){
// se il valore assoluto della distanza tra meta e la posizione
// attuale del movieclip, è inferiore ai 5 pixel
if (Math.abs(meta-_x) < 5) {
// stabilisci una nuova meta, con una scelta random
// all'interno dell'intervallo 300-700
meta = random(400) + 300;
}
}
// aggiungi alla posizione del movieclip sull'asse delle X, il
// valore di "meta" meno l'attuale posizione, fratto "frame"
_x += (meta - _x)/frame;
}
Al movieclip si-no relativo ai quadratini, assegnamo come script (riporto solo il mouseUp), nella riga commentata:
onClipEvent(mouseUp){
premuto = false;
if(sopra){
colore.setRGB( 0xFFFFFF );
if (!quadrati) {
gotoAndStop (1);
for (i = 1; i < 4; i++) {
_root["quad" + i].fermo = true;
_root["quad" + i].meta = 650+(10*i);
}
} else {
gotoAndStop (2);
for (i = 1; i < 4; i++) {
_root["quad" + i].fermo = false;
}
}
quadrati = !quadrati;
}else{
colore.setRGB( 0x000000 );
}
updateAfterEvent();
}
Analizziamo prima questa parte: al rilascio del tasto del mouse, se la variabile quadrati è falsa, il movieclip va al frame 1 (la
scritta "si"), altrimenti va al frame 2 (la scritta "no"), e il valore di quadrati viene invertito.
onClipEvent(mouseUp){
premuto = false;
if(sopra){
colore.setRGB( 0xFFFFFF );
if (!quadrati) {
gotoAndStop (1);
for (i = 1; i < 4; i++) {
_root["quad" + i].fermo = true;
_root["quad" + i].meta = 650+(10*i);
}
} else {
gotoAndStop (2);
for (i = 1; i < 4; i++) {
_root["quad" + i].fermo = false;
}
}
quadrati = !quadrati;
}else{
colore.setRGB( 0x000000 );
}
updateAfterEvent();
}
Cliccando sul movieclip, se quadrati è falsa, inneschiamo un ciclo con il for. Per la i che va da 1 a 3, prendiamo i quadratini con nome di istanza "quad" più i (e quindi, appunto, quad1, quad2, quad3), e ne settiamo la variabile fermo come vera. Se guardiamo lo script associato ai quadratini, vedremo che la scelta random della meta
avviene se fermo è falsa: quindi, una volta premuto il movieclip, i quadratini raggiungeranno l'ultima meta scelta, e lì si
fermeranno. Ma noi facciamo di più: impostiamo un'altra meta, vicino al limite del filmato. Sarà 650 più i per 10, e quindi 660,
670 e 690.
Al contrario, quando cliccheremo ancora sul movieclip, (e quadrati sarà vera), ripristineremo il valore di fermo su false (e i
quadratini ricominceranno ad avere mete random, e quindi a muoversi).