Usnul
10.06.2006, 01:16
import flash.display.DisplayObject;
import flash.utils.Timer;
import flash.utils.getTimer;
import flash.events.Event;
import flash.display.Sprite;
public class Tween
{
private var __fpsTimer:uint = getTimer();
private var __time:uint = 0;
private var __start:uint = 0;
public var x1:Number,x2:Number,y1:Number,y2:Number = 0;
private var __tween:Sprite = new Sprite;
public var target:DisplayObject;
public function Tween(obj:DisplayObject,x:Number,y:Number,time:uint):void {
__tween.addEventListener("enterFrame",enterFrameHandler);
__start = getTimer();
__time = time;
target = obj;
x1 = target.x;
y1 = target.y;
x2 = x;
y2 = y;
}
public function getState():Number{
var s:Number = (getTimer()-__start)/__time;
if(s>1){
s = 1;
}
else if(s<0){
s = 0;
}
//trace("State of tween: "+s);
return s;
}
private function enterFrameHandler(event:Event):void{
var t:Number = (getTimer()-__start);
if(t>=__time){
t = __time;
//trace("Tween "+this+" has ended.");
__tween.removeEventListener("enterFrame",enterFrameHandler);
}
target.x = x1+(x2-x1)*t/__time;
target.y = y1+(y2-y1)*t/__time;
}
}
писалось для себя, так что вполне пологаю что это не наилучшее решение, но все же побыстрее стандартного и в 90% ситуаций годится вполне.
import flash.utils.Timer;
import flash.utils.getTimer;
import flash.events.Event;
import flash.display.Sprite;
public class Tween
{
private var __fpsTimer:uint = getTimer();
private var __time:uint = 0;
private var __start:uint = 0;
public var x1:Number,x2:Number,y1:Number,y2:Number = 0;
private var __tween:Sprite = new Sprite;
public var target:DisplayObject;
public function Tween(obj:DisplayObject,x:Number,y:Number,time:uint):void {
__tween.addEventListener("enterFrame",enterFrameHandler);
__start = getTimer();
__time = time;
target = obj;
x1 = target.x;
y1 = target.y;
x2 = x;
y2 = y;
}
public function getState():Number{
var s:Number = (getTimer()-__start)/__time;
if(s>1){
s = 1;
}
else if(s<0){
s = 0;
}
//trace("State of tween: "+s);
return s;
}
private function enterFrameHandler(event:Event):void{
var t:Number = (getTimer()-__start);
if(t>=__time){
t = __time;
//trace("Tween "+this+" has ended.");
__tween.removeEventListener("enterFrame",enterFrameHandler);
}
target.x = x1+(x2-x1)*t/__time;
target.y = y1+(y2-y1)*t/__time;
}
}
писалось для себя, так что вполне пологаю что это не наилучшее решение, но все же побыстрее стандартного и в 90% ситуаций годится вполне.