Просмотр полной версии : Обрезать битмап.
Подскажите как вырезать из BitmapData области залитые определённым цветом? Не спрятать а именно вырезать. Что бы onMouseOver не срабатывал на вырезанных "дырках". Маски не помогают.
зы. Bitmap берётся из библиотеки и накладывается на Sprite.
Создать Shape нужной формы(с дырками) и наложить на hitArea у Sprite'а
В таком случае 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;
}
Я не знаю каким образом ты форматировал свой код. Но нормальные люди форматируют тэгом CODE, лично я не собираюсь гробить свои глаза смотря на это творчество синим и зеленым.
Это был тэг PHP. Уже исправил.
2morrowMan
24.10.2007, 01:19
sh.mouseEnabled = false;
Всё. Нашёл ошибку у себя в ДНК, забыл добавить спрайт с нарисованной областью к основному спрайту. Всё работает, спасибо. Вопрос закрыт.
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;
}
}
}
Спасибо. Всё работает.
И ещё вопрос. С простым ромбом фишка с хитАреа проходит. А как быть если это сложный битмап со всякими завитушками и его нельзя повторить простыми лайнТу?
Попробуй засунуть битмап в спрайт(копию битмапа) и сделай спрайт хит ареей?
Нет. так к сожалению не работает.
Да вот хотябы. Дерево перекрывает грибочек.
MerlinTwi
25.10.2007, 12:30
Если это не нужно делать динамически, то лучше так:
1. Добавляем в библиотеку новый мувиклип
2. Вставляем в него картинку
3. Делаем на картинке правой кнопкой мыши Break Apart получаем shape с заливкой картинкой
4. Берем инструмент лассо (L), ниже включаем магическую палочку (Magic Wand), выделяем все прозрачные области на shape и просто их удаляем.
см. аттач
Спасибо но. В том то и дело что динамически, причём графики очень много и она очень разная.
Я бы сказал никак. Тоесть можно конечно математически находить вершины, потом заливать их вектором.
Вобщем предлагаю сказать клиенту что задача технически не выполнима и не парится.
MerlinTwi
25.10.2007, 16:57
Как вариант, сделать свой "onMouseOver", при движении мышки брать все объекты под курсором мыши (getObjectsUnderPoint), и если среди них есть битмапы, то проверять, не является ли прозрачным цвет под курсором мыши и если нет, то генерить от его имени событие "myMouseOver"
MerlinTwi :) Да я так и сделал. Но думалось что есть более простой и надёжный способ.
Упростил пример :) Теперь работает без глюклв. Может кому нибудь, когда нибудь пригодится :)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.