Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   beginBitmapFill и прозрачность (http://www.flasher.ru/forum/showthread.php?t=141959)

nommet 08.07.2010 21:24

beginBitmapFill и прозрачность
 
Всем привет,

хотелось бы спросить у общественности по сабжевому вопросу. Исходная композиция такова:

1) Два объекта Sprite, один частично перекрывается вторым
2) Создаю объект типа BitmapData, картинка с прозрачностью
3) Используя beginBitmapFill рисую картинку на первом и на втором спрайте

Вопрос: каким магическим образом можно сделать так, что бы прозрачность картинки на втором спрайте работала и из под второго спрайта было бы видно первый?

Спасибо!

wvxvw 08.07.2010 22:10

Так оно вроде и так работает... или я не понял вопрос...

nommet 08.07.2010 22:41

Цитата:

Сообщение от wvxvw (Сообщение 920874)
Так оно вроде и так работает... или я не понял вопрос...

Оно работает до тех пор, пока я не пользуюсь beginBitmapFill... Флэш заливает картинку игнорируя альфаканал, забивает белый фон.

Добавлено через 2 минуты
Цитата:

Сообщение от wvxvw (Сообщение 920874)
Так оно вроде и так работает... или я не понял вопрос...

Если посмотреть цвет точки с координатами (0, 0) типа

Код AS3:

trace(bitmap.getPixel32(0, 0))

то возвращается число 0xFFFFFFFF, т.е. прозрачность на лицо.

Wolsh 08.07.2010 22:49

Значит у Вас БитмапДата получается без прозрачности.
Как Вы ее создаете?

Добавлено через 26 минут
Вообщето 0xFFFFFFFF - это налицо непрозрачность.

nommet 08.07.2010 23:16

Цитата:

Сообщение от wvxvw (Сообщение 920874)
Так оно вроде и так работает... или я не понял вопрос...

Извините, господа, это был me-bug... В одном из 5-ти мест при создании BitmapData я не указал флаг transparent = true и цвет 0xFFFFFF... Странно, эти данные стоят по умолчанию, однако если их не указать явно, то картинка получается непрозрачной...

alexxus 13.02.2013 05:14

У меня вопрос по этой же теме, по-этому разворошу её.
Есть спрайт tmp. рисую в нем в Graphics фигуру. отображаю. - Клик мыши по незарисованной области tmp- норм проходит на нижележащем объекте.

Но если я копирую содержимое спрайта tmp в спрайт res:
Код AS3:

                         var bms:BitmapData = new BitmapData(mapW, mapH, true, 0);
                        bms.draw(tmp);
                        res.graphics.beginBitmapFill(bms);
                                res.graphics.drawRect(0, 0, mapW, mapH);
                        res.graphics.endFill();

то клик мыши по незакрашенной области res не доходит до нижележащих объектов, а таргетом является res

Wolsh 13.02.2013 07:42

И что непонятно? Во втором спрайте у Вас рисуется прямоугольник. У него нет никаких "незакрашенных" областей. Если где-то изображение прозрачно, то это тоже самое, как закрасить прямоугольник цветом с непрозрачностью ноль — вроде бы ничего нет, а на мышь реагирует)))

alexxus 13.02.2013 08:04

Ага. Еще пошарил и нашел тему с вашим участием http://www.flasher.ru/forum/showthre...eginBitmapFill.
Дошло, что прозрачность "работает" только в векторных объектах, коими graphics. и является. А при выполнении beginBitmapFill все это дело "растеризуется".
В общем решил проблему, использовав ф-ю проверки альфаканала кликаемого пикселя,

Код AS3:

//-----------------------------------------------------------------------------------------
                public static function mouseHits(target:DisplayObject):Boolean{
                        if (target == null || target.stage == null){
                        return false;
                        }
                        if (target.hitTestPoint(target.stage.mouseX, target.stage.mouseY)){
                                var aMatrix:Matrix = new Matrix();
 
                                aMatrix.translate(-target.mouseX, -target.mouseY);
                                var bd:BitmapData= new BitmapData(1, 1, true, 0x00000000);
                                bd.draw(target, aMatrix);
                                var alpha:uint = ((bd.getPixel32(0, 0) >> 24) & 0xFF);
                                bd.dispose();
                                return alpha > 0x0F;
                        }
                        return false;
                }



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

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