per quanto riguarda la prima questione, in pratica si tratta solo di applicare una proporzione al caso,
in questo caso in effetti dobbiamo trovare una corrispondenza tra la posizione (_x) della barra, e il frame a cui mandare la testina dell'altro clip... per la proporzione abbiamo bisogno di quattro valori di cui tre noti e uno incognito... li troviamo facilmente consultando le proprietà e gli script che abbiamo realizzato finora
per prima cosa però dobbiamo dare un nome di istanza ad entrambi i nostri clip, per semplicità li chiameremo "barra" e "palla", e poi la proporzione
frame : barra._x = palla._totalframes : 265
frame -> è quello che dobbiamo trovare, (perchè poi lo useremo per fare palla.gotoAndStop(frame);
barra._x -> è la posizione "corrente" della barra
palla._totalframes -> è una proprietà di sola lettura che indica il numero massimo di frames del clip palla
265 -> è il massimo dello spostamento che può assumere _x, ce lo ritroviamo facilmente nel codice scritto in precedenza
di conseguenza la formula per trovare il nostro frame incognito, diventerà
frame = (barra._x*palla._totalframes)/265;
siccome però la _x non parte da 0, va riportata a 0 sia nella posizione corrente che nel limite della posizione
frame = ((barra._x-25)*palla._totalframes)/(265-25);
inoltre, visto che abbiamo bisogno di un valore intero, dobbiamo aggiungere l'arrotondamento
frame = Math.round(((barra._x-25)*palla._totalframes)/(265-25));
ultima cosa, visto che il primo frame è pari a 1 e non a 0 (come si otterrebbe dalla formula precedente, nel caso iniziale), dobbiamo aggiungere una unità al calcolo precedente ottenendo la nostra formula finale
frame = Math.round(((barra._x-25)*palla._totalframes)/(265-25))+1;
ora il codice va aggiunto a quello precedente, ma bisogna prendere in considerazione il fatto che la formula per funzionare va reiterata nel tempo, cosa possibile grazie all'utilizzo dell'evento onEnterFrame, della classe MovieClip, riprendiamo il codice iniziale e montiamo quello appena ottenuto
codice:
on (press) {
this.onEnterFrame = function(){
var frame = Math.round(((this._x-25)*this._parent.palla._totalframes)/(265-25))+1;
this._parent.palla.gotoAndStop(frame);
}
this.startDrag(false, 25, 350, 265, 350);
}
on (release, releaseOutside) {
delete this.onEnterFrame;
this.stopDrag();
}
bada al fatto che così il codice va in proporzione rispetto allo spostamento della barra (più vado a destra, più la timeline di "palla" andrà a destra)
per eseguire al contrario dovrebbe bastare (non son sicuro perche non posso provarlo) effettuare un altro passaggio in cui sottrarre frame a _totalframes
codice:
on (press) {
this.onEnterFrame = function(){
var temp = Math.round(((this._x-25)*this._parent.palla._totalframes)/(265-25))+1;
var frame = this._parent.palla._totalframes-temp;
this._parent.palla.gotoAndStop(frame);
}
this.startDrag(false, 25, 350, 265, 350);
}
on (release, releaseOutside) {
delete this.onEnterFrame;
this.stopDrag();
}