salve ragazzi... mi trovo ad affrontare un problema che da ieri non riesco a risolvere..
vorrei simulare il movimento di un disco da deejay che con la pressione del mouse sopra mi ruota a destra o sinistra in base a come sposto il mouse...
il risultato che sono riuscito ad ottenere per adesso è il seguente
risultato
solo che se giocate un pochino con la rotela per un po di secondi muovendovi velecomente e cliccando più volte su di essa..
inizia a ruotare senza controllo e dopo yun pò si blocca.
ho reciclato una funzione as2 trovata per il web alla quale era associata anche il drag and drop in posizioni x e y cosa che a me non serve visto che la rotella che vedete deve solo ruotare e non spostarsi su cordinate x e y.
poosto cmq il codice usato ma premetto che è un pò contorto da capire e sarei lieto di riscrivere la funzione perchè credo che si posssa ottenere lo stesso effetto con poche linee di codice.
Sapete aiutarmi
non so casomai utilizzando anche librerie esterne come la mc_tween o cosa simile per simulare il decelleramento al rilascio
grazie in anticipo
ecco il codice posizionato dentro mc objeto la rotella per intenderci
Codice PHP:m = 1;
inercia = 5000;
inx = _x;
iny = _y;
r = _rotation;
min = 1;
originx = _x;
originy = _y;
originr = _rotation;
//friccion
b = 1.2;
//inicializando
vr = 0;
torque = 0;
vx = 0;
vy = 0;
onEnterFrame = function () {
if (modo == 1) {
if (modo_time == 1) {
modo_time = 0;
mxx = _root._xmouse;
my = _root._ymouse;
mx0 = mxx;
my0 = my;
dmx = mxx-mx0;
dmy = my-my0;
} else {
mxx = (_root._xmouse+mxx)/2;
my = (_root._ymouse+my)/2;
dmx = mxx-mx0;
dmy = my-my0;
mx0 = mxx;
my0 = my;
}
fx = (dmx-vx)*m;
fy = (dmy-vy)*m;
ldx = mxx-inx;
ldy = my-iny;
if (fx == 0) {
mlength = ldx;
mforce = fy;
torque = mforce*mlength;
} else if (fy == 0) {
mlength = ldy;
mforce = fx;
torque = -(mforce)*mlength;
} else {
k = fy/fx;
kx = (-(k)*k*ldx+k*ldy)/(-(k)*k-1);
ky = k*(kx-ldx)+ldy;
mlength = Math.sqrt(kx*kx+ky*ky);
mforce = Math.sqrt(fx*fx+fy*fy);
if (fx*ky>0) {
torque = -(mforce)*mlength;
} else {
torque = mforce*mlength;
}
}
vx = dmx;
vy = dmy;
inx += vx;
iny += vy;
vr = vr-torque/inercia;
ldx = mxx-inx;
ldy = my-iny;
var cos;
var sin;
cos = Math.cos(vr/180*Math.PI);
sin = Math.sin(vr/180*Math.PI);
addx = ldx*cos+ldy*sin-ldx;
addy = -(ldx)*sin+ldy*cos-ldy;
inx += -(addx);
iny += -(addy);
} else if (modo == 2) {
if (modo_time == 1) {
modo_time = 0;
vx = vx-(addx);
vy = vy-(addy);
}
torque = 0;
addx = 0;
addy = 0;
inx += vx;
iny += vy;
}
r -= vr;
//this._x = inx; eliminate perchè non mi servivano
//this._y = iny;
this._rotation = r;
vx = vx/b;
vy = vy/b;
vr = vr/b;
};
stop();

Rispondi quotando