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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 30.01.2015, 20:40
djken вне форума Посмотреть профиль Отправить личное сообщение для djken Посетить домашнюю страницу djken Найти все сообщения от djken
  № 1  
Ответить с цитированием
djken
 
Аватар для djken

Регистрация: May 2010
Адрес: Краснодар
Сообщений: 182
Отправить сообщение для djken с помощью ICQ Отправить сообщение для djken с помощью Skype™
Question Как получить ширину мувика с маской?

Всем привет.
Всегда мучил такой вопрос:

В мувике два слоя - маска и под ним маскируемый объект.
Почему, когда хочу получить размер мувика
Код AS3:
mc.width
, выдает полный размер, будто в нем нет маски?

Приходится получать размер мувика через
Код AS3:
mc.mask.width
Может есть решение о которм я не знаю?

Заранее спасибо за помощь в данном вопросе
__________________
кто не отвечает, того garbage collector забирает

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Почему, когда хочу получить размер мувика
А что он должен выдавать? Маска не меняет никаких размеров. Она только ограничивает область отображения.
Цитата:
Может есть решение о которм я не знаю?
Нет. А чем, собственно, уже найденное решение не устраивает?

Старый 30.01.2015, 21:09
djken вне форума Посмотреть профиль Отправить личное сообщение для djken Посетить домашнюю страницу djken Найти все сообщения от djken
  № 3  
Ответить с цитированием
djken
 
Аватар для djken

Регистрация: May 2010
Адрес: Краснодар
Сообщений: 182
Отправить сообщение для djken с помощью ICQ Отправить сообщение для djken с помощью Skype™
Устраивает. Думал, может есть решение, которого я не знаю )
__________________
кто не отвечает, того garbage collector забирает

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

Регистрация: Jan 2013
Сообщений: 322
в этом решении есть таракан.
например в mc всего одна точка в 1 пиксель. а маска - квадрат 100 пикселей.
хотя тут нет правильных решений, можно считать прозрачные пиксели, но тоже таракан. можно написать единственное правильное вычисление ширины с учетом векторной маски с нуля, но слишком хардкорно и будет медленно.

Старый 31.01.2015, 15:18
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 5  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
nubideus - не выдумывай про затраты.

Код AS3:
if(content.width < mask.width) return content.width
return mask.width
Про прозрачные пиксели это отдельная тема.
__________________
Марк Tween

Старый 31.01.2015, 16:02
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 6  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
in4core, это не правильное решение. как минимум если маска и контент не пересекаются то ширина должна быть 0. getBounds не предлагать, это все равно будет не правильно.

Цитата:
не выдумывай про затраты
вот ты знаешь как graphics data перегнать в полигоны?

самое простое решение - отрисовать весь вектор и весь растр белым цветом в битмапу. что бы прозрачные линии были белыми, и прозрачные области растра тоже белыми.
потом сделать то же для маски, только в другую битмапу. потом сделать AND-наложение двух этих битмап. и только потом считать прозрачные пиксели.
но вообще флеш не так получает ширину клипа, т.е. он не считает пиксели.
Изображения
 

Старый 31.01.2015, 19:59
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 7  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
...белым цветом...
Не проще сложить прямоугольники, создать такую битмапдату и отрисовать в нее объект с маской, а потом уже спокойно найти прямоугольник непрозрачных пикселей?
Хотя, чего складывать-то, маска не над объектом нас и не интересует. Просто отрисовываем замаскированный объект в битмапдату и находим прямоугольник непрозрачности.
__________________
Reality.getBounds(this);

Старый 01.02.2015, 12:11
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 8  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
Wolsh, во флеше прозрачные линии и прозрачные картинки считаются.

соответственно просто считать прозрачные пиксели не будет достаточно правильно. нужно все прозрачное раскрасить, и только после этого считать прозрачные пиксели.

Цитата:
проще сложить прямоугольники
я это опустил что бы описание короче было

Старый 01.02.2015, 13:32
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 9  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Wolsh, во флеше прозрачные линии и прозрачные картинки считаются.
Чего делают? Кем считаются, не понял.. getColorBoundsRect() считает то, что скажете. Хоть в альфа-канале, хоть в RGB. Нет никакой проблемы получить прямоугольник, описывающий все пиксели с ненулевой альфой. Лично я именно так понимаю задачу "узнать ширину объекта с наложенной маской" — найти прямоугольник всех видимых пикселей. Что и зачем надо закрашивать, мне непонятно.
__________________
Reality.getBounds(this);

Старый 01.02.2015, 13:49
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 10  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
Wolsh, нарисуй прозрачный круг в шейпе и получи ширину шейпа.

Код AS3:
var shape:Shape = new Shape();
shape.graphics.beginFill(0xFFFFFF, 0);
shape.graphics.drawCircle(100, 100, 100);
trace(shape.width); // 200

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

Теги
width , маска , размер
Опции темы
Опции просмотра

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

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


 


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


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