Форум 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=102833)

Artureg 24.10.2007 00:34

Обрезать битмап.
 
Подскажите как вырезать из BitmapData области залитые определённым цветом? Не спрятать а именно вырезать. Что бы onMouseOver не срабатывал на вырезанных "дырках". Маски не помогают.

зы. Bitmap берётся из библиотеки и накладывается на Sprite.

Nirth 24.10.2007 00:43

Создать Shape нужной формы(с дырками) и наложить на hitArea у Sprite'а

Artureg 24.10.2007 00:57

В таком случае handleMouseOverSprite вообще не срабатывает

Shape на хитАреа спрайта наложить не получается пишет
"1067: Implicit coercion of a value of type flash.display:Shape to an unrelated type flash.display:Sprite."

Если на спрайт не добавлять битмап то всё работает.

Код:

var s:Sprite = new Sprite();                       
s.addEventListener(MouseEvent.MOUSE_OVER,handleMouseOverSprite);
s.addEventListener(MouseEvent.MOUSE_OUT,handleMouseOutSprite);               
var bd:Bitmap = new Bitmap(new Pic(tw,th));
                                       

var sh:Sprite = new Sprite();
sh.graphics.beginFill(0x000000);
sh.graphics.moveTo(0,18);
sh.graphics.lineTo(36,0);
sh.graphics.lineTo(37,0);
sh.graphics.lineTo(73,18);
sh.graphics.lineTo(73,19);
sh.graphics.lineTo(37,37);
sh.graphics.lineTo(36,37);
sh.graphics.lineTo(0,19);
sh.graphics.endFill();

s.addChild(bd);
s.hitArea = sh;

Код:

function handleMouseOverSprite(e:MouseEvent):void{       
        (e.target).alpha = 0.9;
}
function handleMouseOutSprite(e:MouseEvent):void{
        (e.target).alpha = 1;
}


Nirth 24.10.2007 01:04

Я не знаю каким образом ты форматировал свой код. Но нормальные люди форматируют тэгом CODE, лично я не собираюсь гробить свои глаза смотря на это творчество синим и зеленым.

Artureg 24.10.2007 01:07

Это был тэг PHP. Уже исправил.

2morrowMan 24.10.2007 01:19

Код:

sh.mouseEnabled = false;

Artureg 24.10.2007 01:20

Всё. Нашёл ошибку у себя в ДНК, забыл добавить спрайт с нарисованной областью к основному спрайту. Всё работает, спасибо. Вопрос закрыт.

Nirth 24.10.2007 01:25

Код:

package {
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.display.Sprite;
        import flash.events.MouseEvent;

        public class HitArea extends Sprite
        {
                public function HitArea()
                {
                        addChild(createButton()).addEventListener(MouseEvent.CLICK, trace);
                }
               
                private function createButton():Sprite
                {
                        var result:Sprite = new Sprite();
                                result.addChild(new Bitmap(new BitmapData(200, 200, true, 0xFFFF6600)));
                                result.hitArea = result.addChild(createHitArea()) as Sprite;
                                result.buttonMode = result.useHandCursor = true;
                               
                        return result;
                }
               
                private function createHitArea():Sprite
                {
                        var result:Sprite = new Sprite();
                                result.graphics.beginFill(0x000000);
                                result.graphics.moveTo(0,18);
                                result.graphics.lineTo(36,0);
                                result.graphics.lineTo(37,0);
                                result.graphics.lineTo(73,18);
                                result.graphics.lineTo(73,19);
                                result.graphics.lineTo(37,37);
                                result.graphics.lineTo(36,37);
                                result.graphics.lineTo(0,19);
                                result.graphics.endFill();
                       
                        return result;
                }
        }
}


Artureg 24.10.2007 01:42

Спасибо. Всё работает.

И ещё вопрос. С простым ромбом фишка с хитАреа проходит. А как быть если это сложный битмап со всякими завитушками и его нельзя повторить простыми лайнТу?

Nirth 24.10.2007 02:12

Попробуй засунуть битмап в спрайт(копию битмапа) и сделай спрайт хит ареей?


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

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