PDA

Просмотр полной версии : Zoom out, zoom in, tween


ChieF_Of_ReD
07.12.2011, 20:06
Доброе утро, вечер, день.

Есть замечательная весчь под названием tween (http://www.actionscript.org/resources/articles/170/1/Flash-MX-2004-Undocumented-TweenEasing-Classes-Documented/Page1.html). Возможности позволяют решить очень много проблем с движением объектов. Но есть одна задача которую я не могу решить.


У нас есть карта, в карте имеется балун (шарик).

При загрузке карты она центруется по шарику. Есть две кнопки "zoom +" и "zoom -". соответсвенно увеличивающие и уменьшающие масштаб на +-150.

Проблема в то что при изменение _xscale и y_scale для tween . Масштаб меняется от центра объекта "карта". И помимо масштаба фокус с шарика уезжает в разные стороны (в зависимости от расстояния до центра карты).
Задача зум ин, зум аут, относительно шарика.
примерное решение я вижу - в свойства tween'a можно как-то прописывать формулу изменения движения. Возможно там можно пропистаь необходимое условие, но это просто догадка.

С радостью послушаю Ваши мысли по данному вопросу.
С уважением Артём

mooncar
07.12.2011, 20:52
Нужно также менять координаты _x и _y шарика по мере изменения _xscale и _yscale - для корректировки.
Теми же твинами, например.
Дельты вычислять в зависимости от масштабирования.

ChieF_Of_ReD
08.12.2011, 02:01
Нужно также менять координаты _x и _y шарика по мере изменения _xscale и _yscale - для корректировки.
Теми же твинами, например.
Дельты вычислять в зависимости от масштабирования.

Этим я занимался весь сегодняшний день. Но пока каких-то видимых результатов достигнуто не было.К сожалению не могу сообразить какую формулу прикрутить для для изменения _x & _y наверно это из-за непонимания некоторых важных моментов в работе tween'a

dark256
08.12.2011, 02:10
Ну вот поживому надергал

var path = this
var CLK:Object // ZOOM PISITION
var CLK2:Object // ZOOM PISITION 2

function changePOS(){
CLK2 = { x:MAP._xmouse, y:MAP._ymouse }

MAP._x += (CLK2.x - CLK.x)*MAP._xscale/100
MAP._y += (CLK2.y - CLK.y)*MAP._xscale/100
}

function zoom_func() {
calc = zoom_procent
TweenLite.to( MAP, 0.5, { _xscale:calc, _yscale:calc, onUpdate:changePOS })
}


any_clip.onMouseMove = function(){
CLK = { x:path.MAP._xmouse, y:path.MAP._ymouse }
}

any_clip.onMouseWheel = function(varDelta:Number, mc) {
path.zoom_func()
}

Суть - CLK - точка от которой начали масштабировать, CLK2 - текущая. При медленном зуме может ездить за мышью.
Ну и медленно зумим, параллельно передвигая карту куда надо в changePOS()
MAP - масштабируемый клип

Вместо координат мыши - используйте координаты шарика. Ту, где он стоял, и ту, куда он смещается.

Ну собссно как это должно выглядеть - тут :) http://galaxywars.ru/FM.html

ChieF_Of_ReD
08.12.2011, 19:32
Таааа, когда руки кривые это диагноз.
Не получилось запустить скрипт дарка. Похоже мне надо курить мануалы в плане общей концепции построения кода. И что есть что.
Где-то тут был топик про зуминг карты относительно курсора. Я его чуток перкопатил и теперь у меня в одно действие соответственно увеличивается и уменьшается масштаб относительно шарика, при увеличение запускается ещё функция центровки.
Вывод: из-за своей криворукости, я лишаюсь красоты. Ну ничего, разберусь и прикручу)
Dark, если не трудно выложи исходник твоего кода.

dark256
08.12.2011, 22:26
Да ну это не спортивно.
Идея - дана. Выложить свой код - ну точно также не поймешь и будет тебе черный ящик.
Свой код выложи тогда уж. Глянем.
Ну и к тому же я плохо и ненативно пишу - изначально испорчу стиль руку и глазомер :)

ChieF_Of_ReD
09.12.2011, 02:02
Я не настаиваю)
ибо пока у меня всё должно РАБОТАТЬ, а дальше настрою как надо.
Свой *****код?)))) не, пока рано. Когда закончу хотел бы продолжить тему в плане оптимизации кода, ибо даже я вижу что ооооочень многое можно сделать по-иному, да и лишний раз что бы ресурсов не жрала.
вот в этом я надеюсь вы мне плотненько поможете. а пока просто буду советоваться)

Добавлено через 3 минуты
да и тем более когда с кодом и оптимизацией закончим, хотелось бы обобщить весь материал который проработал и сделать такой некий универсальный скриптик, который бы помог многим интересующимся, да и Вам, наверно уже поднадоело одно и тоже печатать каждый раз)