Сохранение размера MovieClip внутри масштабируемого MovieClip
Допустим у нас есть обьект 1_mc внутри другого обьекта 2_mc!
Когда мы начинаем менять масштаб 2_mc._xscale , то меняется размер и mc_1! Возникает вопрос, как сохранить размер или масштаб 1_mc, при менющемся масштабе mc_2? У нас есть Stage.scaleMode = "noScale" - возможно применение этого метода для MovieClip? Или может есть какой-то подобный оператор? Для чего это нужно вы спросите.... пример реализации такого эффекта на http://mapia.ua . Если выбрать категории заведений, то при изменении размеров карты , иконки заведения остаются одного и того же размера... хотя по видимому координатная сетка меняется. Пропорцию типа: 2_mc._xscale = 200; 1_mc._xscale = 50; я и сам могу написать... но с ней проблема, таких обьектов внутри 2_mc._xscale очень много... и каждый зумировать заберёт много ресурсов. Помогите, подскажите! Спасибо! |
а зачем не-масштабируемый пихать внутрь мастшабируемого? На слой поверху его надо. Вот и вся математика =)
noScale-подобного метода для MovieClip нет. |
Ну не зря ж я поднял этот вопрос!
Именно такая связка, клип внутри клипа! Есть мувик - он же координатная сетка карты, карту мы можем приблежать и отдалять... но при это обекты или метки которые на ней лежат не должны менять свой размер и находиться в своей координате при любом зуме! Посмотри на пример карты! Вот ещё один пример http://www.anychart.com/products/any...ample_195.html Видишь, ка бы мы не меняли масштаб карты, метки отмеченных городов сохраняют свой размер. Если рисовать их программно. то там есть свойство не сохранять размер векторной графике, а если у нас метки MovieClip? |
Цитата:
По теме - ИМХО, только через обратно-пропорциональное масшатбирование. Добавлено через 7 минут Цитата:
Либо находятся внутри, но их масштаб меняется обратно пропорционально изменению масштаба карты. Сталкивался с такой задачей... |
Цитата:
Я предполагаю использовать много таких меток, 50-100 шт. Сейчас попробую пересчитывать масштаб, обратно пропорционально... Выводами поделюсь ) |
А вы что, все 100 планируете на экране отображать? Включая те, что за пределами видимого экрана? Э, батенька, далеко вы так не поедете...
|
Нет естественно.... Как вы могли такое подумать подумать...
Это столько обьектов будет в видимой области! Например если раскрыть карту на весь экран. Добавлено через 10 минут ООоо!! У меня возникла идея!! Можно ж в каждыю метку засунуть onEnterFrame и при изменения масштаба карты менять обратно пропорционально масштаб данной метки.... НО... 50 onEnterFrame точно затормозят систему ((( Возможно ли написать слушатель события по изменению масштаба карты addListener к каждой отметки? Типа 1_mc.addListener(resize); Только к чему привязать листенер? |
Зачем листенер? Меняете масштаб карты - меняются пропорции меток.
Добавлено через 5 минут Мой вам совет - уберите метки из карты. Сделайте с ними отдельный слой, мувик. И просто передвигайете их пропорционально изменению масштаба. Намучаетесь иначе с перемасштабированием стольких объектов. |
Значит так.... сделал.... по схеме отбратон пропорционального масштабирования:
Код AS1/AS2:
current_zoom - текущий масштаб Как видите разместил 100 обьектов.... производительность не упала... ни при двигании карты , ни при её зумировании!!! Всем спасибо ))) Наверно так и оставлю. Можно конечно попробовать изменять координаты меток... и сравнить что меньше жрёт ресурс.. но думаю разницы особой не будет! Если есть какие-то ещё варианты прошу поделиться )) |
Ужас. onEnterFrame в каждом мувике. Одного-то почему мало было?
Вам нужно всего-то было при изменении мастштаба пересчитать координаты меток. Не захотели вытаскивать метки, видимо. Зря. А вообще, ИМХО, разница будет. Одно дело - двигать мувик с векторной картинкой, а другое - изменять его масштаб, тем более |
Почему выбрал именно масштабирование, объясню....
Карта приближается и отдаляется плавно... соответственно если менять координаты отметок в не масштабируемом контейнере, то они как бы будут догонять свои координаты....отставать , причем визуально видимо... Если же эти отметки лежат в масштабируемом контейнере , где их координаты постоянны... то придется менять их масштаб обратно пропорционально масштабу карты. Поэтому в каждом есть событие onEnterFrame ...для изменения масштаба.... Может не рационально... тогда подскажите как разгрузить систему от onEnterFrame . |
Зачем вам вообще нужен это onEnterFrame?
Организуйте без него. Ведь есть же событие, при котором вы масштаб карты меняете? При этом же событии и пересчет меток делайте. Добавлено через 56 секунд Цитата:
|
Вложений: 1
Цитата:
Там нет onEnterFrame. Масштаб меняется с кнопок и с колесика мыши. По желанию плавного увеличения/уменьшения масштаба с кнопок можно переделать изменение масштаба не пошагово, а через интервальную функцию и событие кнопки onPress. |
Ну вот еще вариант не РАЦИОНАЛЬНЫЙ придумал)))
Код AS1/AS2:
Все это происходит после зума, кстати проверь вложенный клип после зума будет ресайзится вообще или нет - если нет то че парится то! Аттачи все время тот же клип а потом удаляй и снова аттачи при ресайзе. |
Оригинально, но...
А если у него плавно зум идет, например, с колесика, меняется масштаб раз 3-10 в секунду. На карте, допустим, 20-100 меток. Значит в секунду от 60 до 1000 циклов удаления-аттача... Может, конечно, нагрузка и не такая сильная будет и соизмерима с перемасштабированием. Но я все-таки остаюсь за вариант простого пересчета-передвижки координат меток во внешнем мувике. |
Но я все-таки остаюсь за вариант простого пересчета-передвижки координат меток во внешнем мувике.*** да это и так понятно мой друг. Но ТС то че делает придумывает велосипед! Вот мы ему и помогаем велосипед сделать! разными способами)))
|
Кстати, по поводу аттача. Не годится, т.к. после аттача в мувик карты эта метка точно также изменит свой размер сообразно масштабу родительского. И к тому же координаты для аттача все равно надо пересчитывать. Но первая причина делает вообще дальнейшие действия бессмысленными.
|
На момент скролл, я бы вообще снял битмап и матрицей менял его размеры, чем гонять ресурсоемкий вектор. После остановки скрола строил бы новую карту из вектора.
|
Цитата:
1. Делаем один шаг масштабирования (например, колесико делает одну дельту) 2. Читаем битмапу карты. 3. Пересчитываем размеры битамапы с помощью матрицы с учетом дельты. 4. Отрисовываем из новой битмапы вектор в мувик обратно. Такие циклы, также 3-10 раз в секунду будут ли менее ресурсоемкими? |
Не так. Вектор показываем только после n секунд после прекращения зума. Точное значение получаем в результате тестов. При чем, если позволяет технология, отрисовку вектора начинаем от центра зумирования (курсора).
|
Ого )) Спасибо всем , что откликнулись и поддержали тему!
Буду последовательным и комментировать посты по порядку. Цитата:
Скачал, пример... перерасчет координат , при каждой дельте зумма, думал над этим, наверное попробую сделать... отпишу ка вышло... По поводу, как организовал масштабирование.... Код AS1/AS2:
масштабирую setIntervalom - вобще пришёл все таки к выводу что setInеerval намного лучше onEnterFrame... Можно регулировать затраты ресурсов системы, частотой срабатывания функции... Ведь движок влеша не формула один... а у некоторых пользователей ещё стоять до потомные мамонты, или маломощные ноутбуки.... Выход один в таком случае, замедлять анимацию.... в onEnterFrame её никак не уменьшиш, только частотой самого swf - что не всешда удобно... Цитата:
Цитата:
принцип как на гуггл... если кто видел флешевый движок гугла. Или той же мапии... Вот , точно!! Собсно реализую подобный проект http://mapia.ua Сейчас более или менее сделал подобное, покажу как закончу )) |
Часовой пояс GMT +4, время: 19:53. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.