Есть клип Base.baseClip, я его уменьшаю или увеличиваю при вращении скрола. Как сделать так, чтобы объект, который находится под мышкой оставался на месте. То есть нужно как-то хитро сдвигать Base.baseClip, чтобы компенсировать увеличение.
Вот как поступаю я:
CODE
mouseListener.onMouseWheel = function(delta:Number) {
Tools.Zoom(2*delta);
};
Tools.Zoom - функция масштабирования
CODE
private static function Zoom(_zoomDec:Number) {
var newScale:Number = Base.baseClip._xscale+_zoomDec;
var oldX:Number=Base.baseClip._xmouse;
var oldY:Number=Base.baseClip._ymouse;
//не даём слишком увеличить или уменьшить клип
if (newScale>33 && newScale<300) {
Base.baseClip._yscale=Base.baseClip._xscale=newScale;
} else {
return;
}
//компенсируем растяжение
Base.baseClip._x-=oldX-Base.baseClip._xmouse;
Base.baseClip._y-=oldY-Base.baseClip._ymouse;
}
var newScale:Number = Base.baseClip._xscale+_zoomDec;
var oldX:Number=Base.baseClip._xmouse;
var oldY:Number=Base.baseClip._ymouse;
//не даём слишком увеличить или уменьшить клип
if (newScale>33 && newScale<300) {
Base.baseClip._yscale=Base.baseClip._xscale=newScale;
} else {
return;
}
//компенсируем растяжение
Base.baseClip._x-=oldX-Base.baseClip._xmouse;
Base.baseClip._y-=oldY-Base.baseClip._ymouse;
}
Всё это работает почти как надо. ПОЧТИ. Просто пи увеличении или уменьшении объект всё-таки сдвигается.
В чём же дело?
Я понимаю, что это скорее математика, чем Флеш, но может уже кто-то такое делал? Масштабирование я имею ввиду.
Или кто-то может привести формулы для масштабирования относительно центра.