Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Маска для Sprite из линии (http://www.flasher.ru/forum/showthread.php?t=206145)

Akopalipsis 15.01.2014 16:07

Маска для Sprite из линии
 
Вроде должно быть просто и в инете много похожих тем, но не одна не подходит, везде о маске с заливкой, а линии это наверное другое.
Вот как делаю и не работает -
Код AS3:

package 
{
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.display.Sprite;
 
        public class MaskaTest extends Sprite
        {
                [Embed(source="../../../bin/123.jpg")]
                private var Picture0:Class;
                public function MaskaTest()
                {
                        var container:Sprite = new Sprite();
                        container.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
                        super.addChild(container);
 
                        var bm:Bitmap = new Picture0();
                        container.addChild(bm);
 
                        var frame:Sprite = new Sprite();
                        frame.graphics.lineStyle(10);
                        frame.graphics.drawRect(0, 0, 100, 300);
                        frame.graphics.endFill();
                        addChild(frame);
 
                        var maskBMD:BitmapData = new BitmapData(frame.width, frame.height,true,0xffffff);
                        maskBMD.draw(frame);
                        var mask:Bitmap = new Bitmap(maskBMD);
 
                        container.mask = mask;
                }
 
        }
 
}


Hauts 15.01.2014 16:15

Линии не учитываются масками.

Поторопился, тут не в этом дело.

Akopalipsis 15.01.2014 16:57

Цитата:

Поторопился, тут не в этом дело.
А в чём?

Добавлено через 7 минут
Про линии я тоже думал, но тут вроде bm.. Пойду пробовать нарисовать рамку с заливкой, но всё равно надеюсь получить ответ, так как и это когда-нибудь пригодится.
Hauts - когда-нибудь :)

Добавлено через 24 минуты
Сделал с заливкой, тоже самое.
Код AS3:

public function MaskaTest() 
{
        var container:Sprite = new Sprite();
        container.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
        super.addChild(container);
 
        var bm:Bitmap = new Picture0();
 
        var frame:Sprite = new Sprite();
        var gr:Graphics = frame.graphics;
        gr.beginFill(0x000000);
        gr.lineTo(100, 0);
        gr.lineTo(100, 300);
        gr.lineTo(0, 300);
        gr.lineTo(0, 0);
        gr.moveTo(3, 3);
        gr.lineTo(97, 3);
        gr.lineTo(97, 297);
        gr.lineTo(3, 297);
        gr.lineTo(3, 3);
        addChild(frame);
 
        container.mask = frame;
        container.addChild(bm);
}


Isfet 15.01.2014 17:05

Код AS3:

endFill();

кто будет делать

Akopalipsis 15.01.2014 17:08

Цитата:

кто будет делать
Сделал и так же пробовал менять местами добавление в ДОК, но не помогает.

Isfet 15.01.2014 17:11

у меня первый ваш код работает, какой результат должен быть?

Akopalipsis 15.01.2014 17:13

Рамка, не прямоугольную область должно быть видно, а рамку на которую наложена картинка, которая в контейнере.

Добавлено через 30 минут
Восславим же alatar за подсказку о cacheAsBitmap на обоих объектах!

Koopa 15.01.2014 18:22

Как такое может работать?
Код AS3:

private var Picture0:Class;

Код AS3:

var bm:Bitmap = new Picture0();


Isfet 15.01.2014 18:25

Код AS3:

[Embed(source="../../../bin/123.jpg")]  private var Picture0:Class;

это flex-овский тэг Embed

Koopa 15.01.2014 18:33

ок! определись куда детей пристраеваешь:
Код AS3:

super.addChild(container);

Код AS3:

container.addChild(bm);

Код AS3:

addChild(frame);


Akopalipsis 15.01.2014 18:37

Цитата:

ок! определись куда детей пристраеваешь:
А что не так? Если я рамку помещу в контейнер, то разве смогу я сделать маску на контейнер в котором сам нахожусь?

Добавлено через 1 минуту
Просто я много раз переделывал и запутался с супер, но это роли не играет, так как в классе нет переопределения.

Koopa 15.01.2014 18:50

Может так?
Цитата:

addChild
() метод
public function addChild(child:DisplayObject):DisplayObject

Язык версии: ActionScript 3.0
Версии среды выполнения: AIR 1.0, Flash Player 9, Flash Lite 4

Добавляет экземпляр дочернего элемента DisplayObject к экземпляру DisplayObjectContainer. Дочерний элемент добавляется перед (сверху) всеми остальными дочерними элементами в данном экземпляре DisplayObjectContainer. (Чтобы добавить дочерний элемент в конкретную позицию в индексе, используйте метод addChildAt().)

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

Akopalipsis 15.01.2014 18:54

Цитата:

Может так?
Честно сказать я опять не понял...


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

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