![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 5
|
Подскажите пожалуйста, кто делал визуальное выделение муви-клипа, как это можно реализовать? Т.е. на сцене есть mc, в виде прямоугольника, окружности и т.д.
Нужно как-то показать, какие в данный момент выделены (selection). Пробовал рисовать на graphics мувика, маленькие окружности в углах мувика. Но они плавают, при изменении размеров клипа |
|
|||||
|
Думаю стоит применить какой-нибудь фильтр, например, свечение (GlowFilter).
|
|
|||||
|
Регистрация: May 2007
Сообщений: 232
|
Задача не очень простая, как кажется.
Фильт наиболее простой способ, это легче чем рисовать прямоугольную рамку. Я в подобных случаях делал класс (ObjectSelector) у которого были подобные методы: 1) add( object isplayObject ) - добавить в список выделения объект2) remove( object isplayObject ) - удалить объект из списка выделения3) removeAll() - удалить все объекты из списка выделения Внутри (ObjectSelector) был массив, в кором я хранил этот список. Не знаю поможет ли это - мне было удобнее сделать так. |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 5
|
Цитата:
|
|
|||||
|
Регистрация: Oct 2006
Адрес: Волгодонск
Сообщений: 182
|
function risovanie_obramlenie(element_name:MovieClip){ var element_rect_obj:Object=element_name.getRect(_root.konteiner_vivoda); //если ОБРАМЛЕНИЕ выделения не были добавлены if(_root.konteiner_vivoda.element_obramlenie==underfined){ //добавляем клип для рисования обрамления _root.konteiner_vivoda.createEmptyMovieClip("element_obramlenie",glubina_kursor+1); } _root.konteiner_vivoda.element_obramlenie._x=element_rect_obj.xMin; _root.konteiner_vivoda.element_obramlenie._y=element_rect_obj.yMin; _root.konteiner_vivoda.element_obramlenie.clear(); //параметры для рисования линии с градиентом colors = [0xFF0000, 0x0000FF]; alphas = [100, 100]; ratios = [0, 0xFF]; matrix = {a:200, b:0, c:0, d:0, e:200, f:0, g:200, h:200, i:1}; spreadMethod = "reflect"; interpolationMethod = "linearRGB"; focalPointRatio = 0.9; _root.konteiner_vivoda.element_obramlenie.lineStyle(3); _root.konteiner_vivoda.element_obramlenie.lineGradientStyle("linear", colors, alphas, ratios, matrix, spreadMethod, interpolationMethod, focalPointRatio); _root.konteiner_vivoda.element_obramlenie.moveTo(-10, -10); _root.konteiner_vivoda.element_obramlenie.lineTo(-10, element_rect_obj.yMax-element_rect_obj.yMin+10); _root.konteiner_vivoda.element_obramlenie.lineTo(element_rect_obj.xMax-element_rect_obj.xMin+10, element_rect_obj.yMax-element_rect_obj.yMin+10); _root.konteiner_vivoda.element_obramlenie.lineTo(element_rect_obj.xMax-element_rect_obj.xMin+10, -10); _root.konteiner_vivoda.element_obramlenie.lineTo(-10, -10); _root.konteiner_vivoda.element_obramlenie.endFill(); } 1. В функцию/метод передаем ссылку на мувик1, который надо выделить. (у меня это происходило по нажатию на него). 2.Узнаем его размеры. 3.Создаем мувик2 где будет рисоваться "выделение", и засовываем его на самый верх. 4.ставим мувик 2 в координаты (глобальные) левого верхнего угла мувика1. 5.делаем небольшой отступ (у меня 10 клеток) и рисуем квадрат в мувике2. если мувик1 меняет свои координаты (например его перетаскивают и т.д.) или меняет свой масштаб/размеры, то по событию движения мыши (если по онЭнтерФрейму - то визуально заметны скачки) каждый раз запускаем эту функцию. У меня это в АС2. В третьем реализовать не сложнее. Последний раз редактировалось GFreemen; 20.03.2009 в 17:39. |
|
|||||
|
Регистрация: May 2007
Сообщений: 232
|
Аналогично.
Мне кажется рамка не должна быть внутри выделяемых Вами объектов. Допустим все объекты которые Вам нужны находятся в контейнере objectsSprite. В objectsSprite Вы можете создать пустой контейнер для вашей рамки. Каждый раз когда выполняется изменяется содержимое контейнера - перерисовывать рамку. Благодаря классу, который я Вам предложил, можно организовать не подсвечиваение выделенных объектов, а прорисовку рамки Это может быть достигнуто путем перебора объектов и вычисления верхней левой и нижней правой точек. Когда границы известны достаточно вызвать drawRect с нужными размерами. |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 5
|
Всем спасибо. Всё таки остановился на фильтре
|
![]() |
![]() |
Часовой пояс GMT +4, время: 01:17. |
|
|
« Предыдущая тема | Следующая тема » |
|
|