Разрабатываю флешку для сайта. Посмотреть можно тут
Так вот, соты должны увеличиваться при наведении (плавно, анимированно, красиво) и уменьшаться в обратном направлении так же плавно и красиво, когда мышку убираешь. Я сделал анимацию с помощью твинов, но вот незадача: если активно поёрзать мышкой по сотам, то они начинают сдвигаться с места. Причем чем дольше ставишь duration для tween'а, тем больше вероятность что сота уползет в сторону.

Код AS3:
package main{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.*;
import flash.filters.*;
//import fl.motion.Animator;
//import flash.display.Sprite;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
import flash.text.TextField;
import flash.geom.Point;
dynamic public class sota extends MovieClip{
var Tweens = new Array();
var Picture = new MovieClip();
public var Title:String = "";
public var Desc:String = "";
public var Link:String = "";
public function sota() {
// constructor code
buttonMode = true;
useHandCursor = true;
addEventListener(MouseEvent.ROLL_OVER, SotaEnter);
addEventListener(MouseEvent.ROLL_OUT, SotaLeave);
addEventListener(MouseEvent.CLICK, gotourl);
}
public function getPicture(pic:MovieClip):void {
Picture = pic;
}
public function setTitle(titl:String):void {
Title = titl;
}
public function setDesc(titl:String):void {
Desc = titl;
}
public function setLink(titl:String):void {
Link = titl;
}
public function SotaEnter(e:MouseEvent):void {
// Поднимаем соту выше остальных
this.parent.addChildAt(this, parent.numChildren-1);
(parent.parent as MovieClip).desc.text = Desc;
title.text = Title;
Tweens[8] = new Tween(plashka, "alpha", Strong.easeOut, 0, 1, 1, true);
addChildAt(title, numChildren-1);
if(Picture.name != Picture.parent.getChildAt(Picture.parent.numChildren-1).name) {
Picture.parent.addChildAt(Picture, Picture.parent.numChildren-1);
var myTween:Tween = new Tween(Picture, "alpha", Strong.easeOut, 0, 1, 1, true);
}
// Запишем анимацию увеличения соты
Tweens[0] = new Tween(contur, "scaleX", Back.easeOut, 1, 1.2, 10, false);
Tweens[1] = new Tween(contur, "x", Back.easeOut, contur.x, contur.x-0.1*contur.width, 10, false);
Tweens[2] = new Tween(contur, "scaleY", Back.easeOut, 1, 1.2, 10, false);
Tweens[3] = new Tween(contur, "y", Back.easeOut, contur.y, contur.y-0.1*contur.height, 10, false);
Tweens[4] = new Tween(maska, "scaleX", Back.easeOut, 1, 1.2, 10, false);
Tweens[5] = new Tween(maska, "x", Back.easeOut, maska.x, maska.x-0.1*maska.width, 10, false);
Tweens[6] = new Tween(maska, "scaleY", Back.easeOut, 1, 1.2, 10, false);
Tweens[7] = new Tween(maska, "y", Back.easeOut, maska.y, maska.y-0.1*maska.height, 10, false);
// Добавляем фильтр свечения
// Параметры свечения
var color:Number = 0x33CCFF;
var alpha:Number = 0.8;
var blurX:Number = 8;
var blurY:Number = 8;
var strength:Number = 2;
var inner:Boolean = false;
var knockout:Boolean = false;
var quality:Number = BitmapFilterQuality.HIGH;
// Сам фильтр
var filterG = new GlowFilter(color,
alpha,
blurX,
blurY,
strength,
quality,
inner,
knockout);
// Добавляем фильтр в список фильтров
filters = [filterG];
trace("up");
}
public function SotaLeave(e:MouseEvent):void {
for each (var myTween in Tweens) {
myTween.yoyo();
}
// Очищаем значение фильтра
filters = [];
title.text = '';
trace("down");
}
public function gotourl(e:MouseEvent) {
var my_request:URLRequest = new URLRequest(Link);
navigateToURL(my_request, "_self");
}
}
}