Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   маска - картинка (http://www.flasher.ru/forum/showthread.php?t=153682)

Atarion 07.04.2011 19:27

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

mooncar 07.04.2011 20:57

Что перестает работать? Полупрозрачной маску мы так все не сделаете, маска в таком случае будет работать по полной растровой заливке, то есть по прямоугольнику.
Для эмуляции полупрозрачной, например, градиентной маски используются иные приемы.

Atarion 07.04.2011 21:03

а каким образом тогда можно достичь возможности использовать полупрозрачный png как маску?

Добавлено через 41 секунду
или вот опять же - тот же perlinnoise мне посоветовали в соседней теме использовать его для анимации листьев. так ведь для этого он должен быть маской!

mooncar 07.04.2011 21:48

Цитата:

Сообщение от Atarion (Сообщение 987498)
а каким образом тогда можно достичь возможности использовать полупрозрачный png как маску?

Это невозможно в принципе. Битмапа в слое маски всегда даст прямоугольник.

Stargazer 07.04.2011 22:05

Цитата:

Сообщение от mooncar (Сообщение 987514)
Это невозможно в принципе. Битмапа в слое маски всегда даст прямоугольник.

А разве, например, трюк с cacheAsBitmap не работает? По-моему, он работает и с растрами тоже (хотя на 100% не уверен).

Ещё 1 вариант с наложениями я пока не испытывал, но мне кажется, что он тоже должен работать с растрами.

mooncar 07.04.2011 22:30

Цитата:

Сообщение от Stargazer (Сообщение 987522)
Ещё 1 вариант с наложениями я пока не испытывал, но мне кажется, что он тоже должен работать с растрами.

Проверил - не работает.

-De- 07.04.2011 23:21

Ээ cacheAsBitmap И на маску И на слой. Битмапу лично в маску не клал, рисовал в маске с помощью beginBitmapFill - так работало. Очень странно, если нельзя просто битмапу положить.

mooncar 07.04.2011 23:44

Проверьте, может я заблуждаюсь, к вечеру голова уже тяжелая.

nukie 10.04.2011 14:09

Насколько мне известно у флеш плеера есть два рендера - один для растровой графики, другой для векторной. Видимо в тех случаях когда DisplayObject рендрерится векторным рендером, он может быть нормальной маской, и наоборот если битмапным.

Страга 28.04.2011 00:35

Блин, сам ищу как это осуществить, но видимо нет возможности такой (
Цитата:

Ээ cacheAsBitmap И на маску И на слой. Битмапу лично в маску не клал, рисовал в маске с помощью beginBitmapFill - так работало. Очень странно, если нельзя просто битмапу положить.
Да, -De- с beginBitmapFill (который Graphics) прокатывает, но там опять же ж вектор, а не растр. Если же требуется допустим часто перерисовывать (убавлять и добавлять), то будет мне кажется глючить. Мне вот нужно слоев 4-5 таких на весь экран. С битмапой могло и не глючить, а тут... (
Даже пробовать не буду

-De- 28.04.2011 01:34

Вложений: 1
Смените дилера. А лучше вообще пересядьте на что-то менее депрессивное. Работает как угодно.
Код AS3:

package 
{
        import flash.display.Bitmap;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.system.Capabilities;
        import flash.text.TextField;
        import flash.utils.getTimer;
 
        public class Main extends Sprite
        {
                [Embed(source = "image.png")]
                public const tex0:Class;
                [Embed(source = "mask.png")]
                public const tex1:Class;
 
                public var b2:Bitmap = new tex1();
                public var b:Bitmap = new tex0();
 
                public function Main():void
                {
 
                        addChild(b);
                        addChild(b2);
 
                        b2.cacheAsBitmap = true;
                        b.cacheAsBitmap = true;
 
                        b.mask = b2;
                        /*раскомментируйте код ниже, чтоб убедиться, что с вектором всё работает так же*/
                        /*var foo:Sprite = new Sprite();
                        foo.graphics.lineStyle(0);
                        foo.graphics.drawCircle(100, 100, 100);
 
                        addChild(foo);
                        foo.cacheAsBitmap = true;
                        foo.mask = b2;*/

 
 
                        addEventListener(Event.ENTER_FRAME, up);
                }
                public function up(ev:Event):void {
                        b2.x = mouseX;
                        b2.y = mouseY;
                }
 
        }
 
}


spirit2 07.08.2012 11:06

Извиняюсь за археологию, но хотел бы дополнить.

Пусть: b1 и b2 клипы на разных "слоях" в Adobe Flash.
Внутри b2 какая-то полупрозрачная пнг-картинка.

Так вот,
b1.mask = b2; //работает правильно.

А вот если по "слою" в котором b2 кликнуть правой кнопкой и создать маску, то маской будет вся область клипа b2.
Вот не знаю баг это или фича =)

Vit025 15.01.2013 15:18

Мышь все равно реагирует на квадрат. Если под такой замаскированный битмап положить другой клип, этот другой клип будет закрыт для мыши на всей площади битмапа. По крайней мере мне пока не удалось это обойти ...


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

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