| Alex Lexcuk |
23.02.2009 22:53 |
Tween мега стабильный и самый быстрый. Юзаю flex и компилю в нем под 10, так подсунул ему библиотеку из flash cs3 и в этой ситуации tween не подводит.
По вашему коду, вы запускаете твины когда они еще не выполнились, в это же время создаете новые твины, которые должны разорвать объект в разные стороны, но твин добрый и он пытается что-то делать и флешка не вылетает. Вот рабочий код
Код:
import fl.transitions.easing.*;
import fl.transitions.Tween;
import fl.transitions.TweenEvent;
var arr:Array = [];
var ob:Object;
var c:int = 0;
var eff:int = 300;
for (var i:int = 0; i<10; i++) {
for (var j:int = 0; j<10; j++) {
var cont:Sprite = new Sprite();
cont.x = (i+5) * (image.width/10);
cont.y = (j+5) * (image.width/10);
addChild(cont);
var myBitmapData:BitmapData = new BitmapData(image.width / 10,image.height / 10);
var rect:Rectangle = new Rectangle(0,0,image.width / 10,image.height / 10);
var matrix:Matrix = new Matrix();
matrix.tx = i * image.width / 10 * -1;
matrix.ty = j * image.width / 10 * -1;
myBitmapData.draw(image,matrix,null,null,rect,true);
var bitmap:Bitmap = new Bitmap(myBitmapData);
bitmap.x = bitmap.width / 2 * -1;
bitmap.y = bitmap.height / 2 * -1;
cont.addChild(bitmap);
cont.addEventListener(MouseEvent.MOUSE_OVER, over);
cont.addEventListener(MouseEvent.MOUSE_OUT, out);
cont.name = ""+c;
arr[c] = ob = new Object();
ob.sp = cont;
ob.i = 0;
ob.tw = new Tween(ob, "i", None.easeNone, 0, 200, 2, true);
ob.tw.addEventListener(TweenEvent.MOTION_CHANGE, twChange);
ob.tw.stop();
ob.done = false;
ob.id = c;
ob.x = cont.x;
ob.y = cont.y;
ob.finX = Math.random() * cont.x + cont.x / 2;
ob.finY = Math.random() * cont.y + cont.y / 2;
ob.indX = (ob.finX - ob.x)/100;
ob.indY = (ob.finY - ob.y)/100;
c++;
}
}
removeChild(image);
function over(event:MouseEvent) {
c = int(event.target.name);
ob = arr[c];
ob.tw.start();
ob.finX = ob.x + (eff/2 - Math.random() *eff);
ob.finY = ob.y + (eff/2 - Math.random() *eff);
ob.indX = (ob.finX - ob.x)/100;
ob.indY = (ob.finY - ob.y)/100;
addChild(ob.sp);
}
function out(event:MouseEvent) {
}
function twChange(evt:TweenEvent):void
{
ob = evt.target.obj;
if (ob.i<100){
ob.sp.x = ob.x + ob.i * ob.indX;
ob.sp.y = ob.y + ob.i * ob.indY;
}
else{
ob.sp.x = ob.x + (200 - ob.i) * ob.indX;
ob.sp.y = ob.y + (200 - ob.i) * ob.indY;
}
}
Делается массив из объектов и к этим объекта привязываются твины, теперь работу твина нарушать нечему и он всегда выполниться дойдет и все такое.
|