Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как получить ширину мувика с маской? (http://www.flasher.ru/forum/showthread.php?t=210129)

djken 30.01.2015 20:40

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

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

mc.width

, выдает полный размер, будто в нем нет маски?

Приходится получать размер мувика через
Код AS3:

mc.mask.width

Может есть решение о которм я не знаю?

Заранее спасибо за помощь в данном вопросе :)

caseyryan 30.01.2015 20:56

Цитата:

Почему, когда хочу получить размер мувика
А что он должен выдавать? Маска не меняет никаких размеров. Она только ограничивает область отображения.
Цитата:

Может есть решение о которм я не знаю?
Нет. А чем, собственно, уже найденное решение не устраивает?

djken 30.01.2015 21:09

Устраивает. Думал, может есть решение, которого я не знаю )

nubideus 30.01.2015 22:36

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

in4core 31.01.2015 15:18

nubideus - не выдумывай про затраты.

Код AS3:

if(content.width < mask.width) return content.width
return mask.width

Про прозрачные пиксели это отдельная тема.

nubideus 31.01.2015 16:02

Вложений: 1
in4core, это не правильное решение. как минимум если маска и контент не пересекаются то ширина должна быть 0. getBounds не предлагать, это все равно будет не правильно.

Цитата:

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

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

Wolsh 31.01.2015 19:59

Цитата:

...белым цветом...
Не проще сложить прямоугольники, создать такую битмапдату и отрисовать в нее объект с маской, а потом уже спокойно найти прямоугольник непрозрачных пикселей?
Хотя, чего складывать-то, маска не над объектом нас и не интересует. Просто отрисовываем замаскированный объект в битмапдату и находим прямоугольник непрозрачности.

nubideus 01.02.2015 12:11

Wolsh, во флеше прозрачные линии и прозрачные картинки считаются.

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

Цитата:

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

Wolsh 01.02.2015 13:32

Цитата:

Wolsh, во флеше прозрачные линии и прозрачные картинки считаются.
Чего делают? Кем считаются, не понял.. getColorBoundsRect() считает то, что скажете. Хоть в альфа-канале, хоть в RGB. Нет никакой проблемы получить прямоугольник, описывающий все пиксели с ненулевой альфой. Лично я именно так понимаю задачу "узнать ширину объекта с наложенной маской" — найти прямоугольник всех видимых пикселей. Что и зачем надо закрашивать, мне непонятно.

nubideus 01.02.2015 13:49

Wolsh, нарисуй прозрачный круг в шейпе и получи ширину шейпа.

Код AS3:

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



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

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