PDA

Просмотр полной версии : маска - картинка


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
а каким образом тогда можно достичь возможности использовать полупрозрачный png как маску?

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

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

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

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

mooncar
07.04.2011, 22:30
Ещё 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
Смените дилера. А лучше вообще пересядьте на что-то менее депрессивное. Работает как угодно.
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
Мышь все равно реагирует на квадрат. Если под такой замаскированный битмап положить другой клип, этот другой клип будет закрыт для мыши на всей площади битмапа. По крайней мере мне пока не удалось это обойти ...