Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.03.2009, 14:30
Intruder1 вне форума Посмотреть профиль Отправить личное сообщение для Intruder1 Найти все сообщения от Intruder1
  № 1  
Ответить с цитированием
Intruder1

Регистрация: Jan 2009
Сообщений: 5
По умолчанию Визульное выделение объектов на сцене

Подскажите пожалуйста, кто делал визуальное выделение муви-клипа, как это можно реализовать? Т.е. на сцене есть mc, в виде прямоугольника, окружности и т.д.
Нужно как-то показать, какие в данный момент выделены (selection).
Пробовал рисовать на graphics мувика, маленькие окружности в углах мувика. Но они плавают, при изменении размеров клипа

Старый 20.03.2009, 16:48
serenkiy вне форума Посмотреть профиль Отправить личное сообщение для serenkiy Найти все сообщения от serenkiy
  № 2  
Ответить с цитированием
serenkiy
 
Аватар для serenkiy

Регистрация: Jan 2009
Сообщений: 60
Отправить сообщение для serenkiy с помощью ICQ
Думаю стоит применить какой-нибудь фильтр, например, свечение (GlowFilter).

Старый 20.03.2009, 17:05
Роман Вадимович вне форума Посмотреть профиль Отправить личное сообщение для Роман Вадимович Найти все сообщения от Роман Вадимович
  № 3  
Ответить с цитированием
Роман Вадимович

Регистрация: May 2007
Сообщений: 232
Задача не очень простая, как кажется.
Фильт наиболее простой способ, это легче чем рисовать прямоугольную рамку.
Я в подобных случаях делал класс (ObjectSelector) у которого были подобные методы:
1) add( objectisplayObject ) - добавить в список выделения объект
2) remove( objectisplayObject ) - удалить объект из списка выделения
3) removeAll() - удалить все объекты из списка выделения

Внутри (ObjectSelector) был массив, в кором я хранил этот список.
Не знаю поможет ли это - мне было удобнее сделать так.

Старый 20.03.2009, 17:17
Intruder1 вне форума Посмотреть профиль Отправить личное сообщение для Intruder1 Найти все сообщения от Intruder1
  № 4  
Ответить с цитированием
Intruder1

Регистрация: Jan 2009
Сообщений: 5
Цитата:
Сообщение от Роман Вадимович Посмотреть сообщение
Задача не очень простая, как кажется.
Фильт наиболее простой способ, это легче чем рисовать прямоугольную рамку.
Я в подобных случаях делал класс (ObjectSelector) у которого были подобные методы:
1) add( objectisplayObject ) - добавить в список выделения объект
2) remove( objectisplayObject ) - удалить объект из списка выделения
3) removeAll() - удалить все объекты из списка выделения

Внутри (ObjectSelector) был массив, в кором я хранил этот список.
Не знаю поможет ли это - мне было удобнее сделать так.
Спасибо. Это понятно. Но больше интересует, как нарисовать саму рамку?

Старый 20.03.2009, 17:36
GFreemen вне форума Посмотреть профиль Отправить личное сообщение для GFreemen Найти все сообщения от GFreemen
  № 5  
Ответить с цитированием
GFreemen
 
Аватар для GFreemen

Регистрация: Oct 2006
Адрес: Волгодонск
Сообщений: 182
Код AS1/AS2:
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.
Старый 20.03.2009, 17:45
Роман Вадимович вне форума Посмотреть профиль Отправить личное сообщение для Роман Вадимович Найти все сообщения от Роман Вадимович
  № 6  
Ответить с цитированием
Роман Вадимович

Регистрация: May 2007
Сообщений: 232
Аналогично.
Мне кажется рамка не должна быть внутри выделяемых Вами объектов.
Допустим все объекты которые Вам нужны находятся в контейнере objectsSprite.
В objectsSprite Вы можете создать пустой контейнер для вашей рамки.
Каждый раз когда выполняется изменяется содержимое контейнера - перерисовывать рамку.
Благодаря классу, который я Вам предложил, можно организовать не подсвечиваение выделенных объектов, а прорисовку рамки
Это может быть достигнуто путем перебора объектов и вычисления верхней левой и нижней правой точек.
Когда границы известны достаточно вызвать drawRect с нужными размерами.

Старый 20.03.2009, 19:31
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 7  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
попробуйте фильтром так
Код:
mc.filters = new Array(new GlowFilter(0xFF0000,1,6,6,6));//свечение (обрисовка контуром)
Если надо убрать фильтр
Код:
mc.filters = null;

Старый 24.03.2009, 18:42
Intruder1 вне форума Посмотреть профиль Отправить личное сообщение для Intruder1 Найти все сообщения от Intruder1
  № 8  
Ответить с цитированием
Intruder1

Регистрация: Jan 2009
Сообщений: 5
Всем спасибо. Всё таки остановился на фильтре

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:17.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 01:17.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.