![]() |
|
||||||||||
|
|||||
|
Регистрация: Oct 2008
Сообщений: 9
|
Здравствуйте,
у меня никак не приходит в голову сделать такую формулу: делаю увеличение от точки мыши но после увеличения эта точка уходит (в данном случае направо уходит), т.е. не остается под курсором мыши, может кто поможет? буду очень благодарен заранее спасибо... map.addEventListener(MouseEvent.MOUSE_WHEEL, MEvent); function MEvent(event:MouseEvent):void{ var mod:Number = 10; map.scaleX += event.delta / mod; map.scaleY += event.delta / mod; // здесь направо убегает после масштабирования map.x = ((2 * mouseX) - (2 * (event.localX * map.scaleX))) / 2; map.y = ((2 * mouseY) - (2 * (event.localY * map.scaleY))) / 2; } |
|
|||||
|
Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
|
не очень понятно чего добиваешься) У меня была задачка когда надо было скролом увеличивать карту так, чтобы центр увеличения находился в точке где мышка находится. Я двигал центр контейнера в котором лежала карта под мышку и масштабировал содержимое контейнера по необходимости. Чтобы не зависеть от масштаба расчет производил от глобальных координат, а не от текущих точек.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ |
|
|||||
|
Регистрация: Oct 2008
Сообщений: 9
|
да, у меня так же, скролом увеличиваешь карту, центр увеличения где мышка находиться, вот только от каких глобальных координат? можно подробнее?
|
|
|||||
|
Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
|
из математики
(ab - ac) = a(b-c) таким образом можно или еще короче мой совет переведи свои точки в глобальные и все сразу станет намного проще) не надо будет пересчет под масштаб. Из за округлений запросто может такая красота вылезать.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ |
|
|||||
|
Регистрация: Oct 2008
Сообщений: 9
|
както не получается через displayObject.localToGlobal() провести провел, но все равно здесь надо делать переасчет
|
|
|||||
|
Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
|
Цитата:
Сначала двигай карту, потом ее изменяй в масштабе.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ |
|
|||||
|
Регистрация: Feb 2007
Сообщений: 63
|
как же я долго с этим мучился....
масштабировал, потом высчитывал смещение, в итоге все равно ролик уезжал куда-то не туда. помог такой костыль: 1) в масштабируемый ролик добавил невидимый объект, который всегда находился в том месте, относительно которого надо масштабировать. в моем случае это был центр "окна", через которое просматривался оригинальный объек. 2) были кнопки сролла и зума. при сроллинге этот невидимый "центр" двигался в масштабируемом ролике так, чтобы всегда находиться центре окна. 3) в функции масштабирования делалось примерно следующее: var point1:Point=dot.localToGlobal(new Point(0,0));//запомнили кординаты "центра" .... //масштабируем .... var point2:Point=dot.localToGlobal(new Point(0,0)); var point3:Point=point2.subtract(point1); //получаем смещение объекта //и компенсируем его object.x-=point3.x; object.y-=point3.y; хотя сдается мне, что все это прекрасно реализовывается через TransformMatrix... |
|
|||||
|
Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
|
разбираем код и смотрим почему уходит влево.
//допустим у вас здесь значения //mouseX = 20; //mouseY = 40; map.scaleX += event.delta / mod; map.scaleY += event.delta / mod; // А теперь после масштабирования ваш ролик вырос, и указатель мыши относительно ролика сдвинулся // допустим event.delta / mod == 2; // тогда ориентировочно // mouseX = 10; // mouseY = 20; // а теперь вы координаты курсора используете в формуле // Но они ведь отличаются от исходных значений которые были до масштабирования в 2 раза //(Да и 2 можно упростить по математике)); map.x = ((2 * mouseX) - (2 * (event.localX * map.scaleX))) / 2; map.y = ((2 * mouseY) - (2 * (event.localY * map.scaleY))) / 2; Поменяйте операции местами, сначала делайте смещение а потом уже масштабируйте и все должно быть ок.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ Последний раз редактировалось SunShadow; 15.07.2009 в 16:33. |
|
|||||
|
Регистрация: Oct 2008
Сообщений: 9
|
Да! Спасибо Вам! заработало, немного изменил (т.е. упростил)
Код: (вот чистый код) map.addEventListener(MouseEvent.MOUSE_WHEEL, _zoom); public function _zoom(mouse:MouseEvent):void { var _xs:Number = mouse["stageX"]; var _ys:Number = mouse["stageY"]; var _xm:Number = mouse["localX"]; var _ym:Number = mouse["localY"]; map.scaleX += mouse.delta / 50; map.scaleY += mouse.delta / 50; map.x = _xs - _xm * map.scaleX; map.y = _ys - _ym * map.scaleY; } |
|
|||||
|
Регистрация: Aug 2012
Сообщений: 108
|
координаты мыши и мне помогли, только так и не понял, какая формула при изменении размера через ползунок +/-? Надо искать координату центра контента(карты) при текущем положении
|
![]() |
![]() |
Часовой пояс GMT +4, время: 19:08. |
|
|
« Предыдущая тема | Следующая тема » |
|
|