Просмотр полной версии : 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 можно как-то прописывать формулу изменения движения. Возможно там можно пропистаь необходимое условие, но это просто догадка.
С радостью послушаю Ваши мысли по данному вопросу.
С уважением Артём
Нужно также менять координаты _x и _y шарика по мере изменения _xscale и _yscale - для корректировки.
Теми же твинами, например.
Дельты вычислять в зависимости от масштабирования.
ChieF_Of_ReD
08.12.2011, 02:01
Нужно также менять координаты _x и _y шарика по мере изменения _xscale и _yscale - для корректировки.
Теми же твинами, например.
Дельты вычислять в зависимости от масштабирования.
Этим я занимался весь сегодняшний день. Но пока каких-то видимых результатов достигнуто не было.К сожалению не могу сообразить какую формулу прикрутить для для изменения _x & _y наверно это из-за непонимания некоторых важных моментов в работе tween'a
Ну вот поживому надергал
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, если не трудно выложи исходник твоего кода.
Да ну это не спортивно.
Идея - дана. Выложить свой код - ну точно также не поймешь и будет тебе черный ящик.
Свой код выложи тогда уж. Глянем.
Ну и к тому же я плохо и ненативно пишу - изначально испорчу стиль руку и глазомер :)
ChieF_Of_ReD
09.12.2011, 02:02
Я не настаиваю)
ибо пока у меня всё должно РАБОТАТЬ, а дальше настрою как надо.
Свой *****код?)))) не, пока рано. Когда закончу хотел бы продолжить тему в плане оптимизации кода, ибо даже я вижу что ооооочень многое можно сделать по-иному, да и лишний раз что бы ресурсов не жрала.
вот в этом я надеюсь вы мне плотненько поможете. а пока просто буду советоваться)
Добавлено через 3 минуты
да и тем более когда с кодом и оптимизацией закончим, хотелось бы обобщить весь материал который проработал и сделать такой некий универсальный скриптик, который бы помог многим интересующимся, да и Вам, наверно уже поднадоело одно и тоже печатать каждый раз)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.