Вот код твина:

Код AS3:
package MikroacseAS3Lib.Tween{
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.display.Sprite;
import flash.system.System;
public class MTween {
private var p:Object;
private var o:Object;
private var osp:Sprite;
private var c:Number;
private var vars:Array;
private var t:Timer;
private var finishFunction:Function;
private var playFunction:Function;
private var startFunction:Function;
public var currentCount:Number;
public var stopped:Boolean;
public var paused:Boolean;
public function MTween(objectToTween:Object,countOfMoves:Number,parameters:Object) {
osp=new Sprite()
c=Math.floor(countOfMoves)||60
p=parameters
o=objectToTween
currentCount=0
vars=[]
stopped=false
paused=false
finishFunction=parameters['onFinish']
playFunction=parameters['onPlay']
startFunction=parameters['onStart']
t=new Timer(1,c)
for(var strObj:String in p){
if(strObj!='onFinish'&&strObj!='onPlay'&&strObj!='onStart'){
osp[strObj]=o[strObj]
vars.push([p[strObj], (osp[strObj]-p[strObj])/c ,strObj])
}
}
if(p['onStart']){
startFunction()
}
t.start()
t.addEventListener(TimerEvent.TIMER,EnterTimer)
t.addEventListener(TimerEvent.TIMER_COMPLETE,EnterTimerFinish)
}
//--------------------------------
private function EnterTimer(e:TimerEvent){
if(currentCount==c){
currentCount=0
stop()
}
for(var param=0;param<vars.length;param++){
osp[vars[param][2]]-=vars[param][1]
o[vars[param][2]]=osp[vars[param][2]]
vars[param]=[p[vars[param][2]], (osp[vars[param][2]]-p[vars[param][2]])/(c-currentCount) ,vars[param][2]]
}
if(p['onPlay']){
playFunction()
}
currentCount++
}
private function EnterTimerFinish(e:TimerEvent){
for(var paramFinish=0;paramFinish<vars.length;paramFinish++){
o[vars[paramFinish][2]]=vars[paramFinish][0]
osp[vars[paramFinish][2]]=vars[paramFinish][0]
}
if(p['onFinish']){
finishFunction()
}
stopped=true
}
//--------------------------------
public function play(){
if(!t.running&&!stopped){
t.start()
paused=false
}
}
public function pause(){
if(t.running&&!stopped){
t.stop()
paused=true
}
}
public function stop(){
if(t.running&&!stopped){
t.stop()
t.reset()
stopped=true
currentCount=0
}
}
public static function create(target:Object,counts:Number,objectParameters:Object):MTween{
return new MTween(target,counts,objectParameters)
}
}
}
Данные о MovieClip передаю в Sprite, т.к. если использовать сразу MovieClip, то в нем параметры округляются до
0.05 .
Вызываю так:

Код AS3:
import MikroacseAS3Lib.Tween.*
MTween.create(mc,705,{rotation:1000})
Собственно, вот что выходит:
Dropbox
Добавлено через 15 минут
Такое ощущение, что с формулой что-то не так:

Код AS3:
(osp[vars[param][2]]-p[vars[param][2]])/(c-currentCount)
Перевод

(объект[переменная(например,x)]-параметры[переменная])/(количество движений-количество сделанных движений)