![]() |
Позиционирование увеличивающегося MovieClip-а
Вложений: 1
Увеличиваю MovieClip размерами больше сцены (окна) приложения. При этом мувик произвольно смещён относительно центра сцены, но важно, чтобы пропорции смещения не изменялись. То есть:
http://www.flasher.ru/forum/attachme...1&d=1298827448 Где прямоугольник без заливки - сцена, окно приложения. Желтый прямоугольник - мувик. Точка "А" находится на мувиклипе, в данный момент в центре окна приложения. Важно чтобы при увеличении мувика точка "А" так и оставалась в центре сцены. Как я это делаю: Вычисляю смещение левой стороны мувиклипа относительно окна Код AS3:
Позиционирую Код AS3:
ложения. Теоретически все выглядит правильно, пересчет в ручную дает погрешность в 1, 2 пиксела на 5000, в данном случае это вполне приемлемо. Но правктически мувик в окне "едет" при увеличении вправо и вниз на 100-200 пикс. Что я делаю не так? Замылил уже мозг, мне надо чтобы кто то свежим взглядом глянул :). |
как раз для таких случаев у DisplayObject есть методы globalToLocal, localToGlobal.
Делается так: 1) Есть мувик с именем mc. 2) Получаем координаты его центра до начала скейла в системе координат его парента: Код AS3:
Код AS3:
Код AS3:
UPD: если мувик лежит непосредственно на стейдже, то можно сэкономить и вычислять координаты центра мувика в системе координат стейджа. Тогда не надо дважды вызывать достаточно ресурсоемкую операцию globalToLocal |
Цитата:
Цитата:
Цитата:
|
Цитата:
В твоем случае коррдинаты в new Point(0,0) надо заменить на координаты точки A относительно mc. Цитата:
|
Цитата:
Спрайт спозиционировать на сцене так, чтобы точка А была в нужном месте. После этого при применении скалирования к спрайту точка А двигаться не будет, а все, что лежит в спрайте, будет равномерно скалироваться относительно нее. |
тоже неплохой вариант
сам последнее время пытаюсь всю графику внутри символов выравнивать так, чтоб точка (0,0) была в геометрическом центре символа. Тогда при изменение размера стейджа надо просто пропорционально изменить координаты мувиков и не надо вызывать гетеры width и height. Работает не всегда, но достаточно часто. |
А, понял! я вас немного в заблуждение ввел этой точкой "А". Дело в том, что точка "А" это не объект, точкой "А" , здесь, я обозначаю место которое сейчас находится в центре сцены, и это место всегда должно оставаться в центре. Спрайт не подходит, так как я заранее не знаю, где именно будет точка "А". Ближайший аналог, такой системы, который приходит на ум - карты гугла и яндекса, или средство просм. изображений в винде.
Добавлено через 6 минут Цитата:
Впрочем мы все равно не о том говорим, не вижу разницы между выявлением отношения координат центра и края к координатам другого объекта, если они в одном координатном пространстве, техника будет одна и та же. |
Цитата:
|
Цитата:
Идея в том, что, зная какая точка мувиклипа должна быть в центре стейджа, независимо от точки регистрации, можно пригвоздить эту точку к стейджу, надо только узнать какую точку внутри мувика надо приклеить. Это моментально делается с помощью панели properties. |
Цитата:
Добавлено через 2 минуты Цитата:
|
создай спрайт mc1 и расположи его в нужной точке (точка А допустим). Положи в mc1 объект, который надо увеличивать (допустим mc2).
Увеличивай или уменьшай mc1, а не mc2. При этом начальная координата mc1 будет являться тем местом на экране, куда как бы увеличивается или уменьшается объект. А чтобы поменять центр увеличения или уменьшения у самого объекта передвигай mc2. Вроде всё просто, а объяснить тяжело :) |
Цитата:
Цитата:
UPD: сорри, перечитал последний пост. Если неподвижная точка не известна сразу то можно её получить когда юзер кликнет по мувику. Надо только пересчитать координаты клика. Делается конечно без панели пропертиес, но с помощью тех-же методов localToGlobal и globalToLocal. Или как вариант можно взять mc.tansform.matrix у кликнутого мувика и умножить её на Point(mouseX,mouseY). По идеи результат должен быть одинаковым. |
Ааа....догнал, что ты хочешь.
Вот простой пример просмотра изображений в винде. Здесь только увеличение, уменьшение по тому же принципу. Код AS3:
|
Цитата:
|
тогда используй матрицу
Код AS3:
Код AS3:
|
Цитата:
Добавлено через 23 минуты Спасибо всем! Так я и не поборол эту штуку! Но нашёл костыль... Работает как надо. Добавлено через 4 часа 1 минуту Дошло до меня. Растягиваем и смещаем мувик. Это мы учитываем. Не учитываем то, что изображение в нем тоже растягивается а значит точка растет и смещается к центру. Здесь надо подбирать каэффициент этого растяжения. Не стал, так как, как уже писал, решил через костыль. |
| Часовой пояс GMT +4, время: 20:02. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.