![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Sep 2013
Сообщений: 2
|
Я создаю объект BitmapData с прозрачным фоном, в котором отрисовывается, например, овал.
Можно ли сделать так, чтобы объектом стал именно овал, а не прямоугольник BitmapData? То есть, чтобы я мог перетаскивать мышью овал, кликая именно по нему, а прозрачная часть прямоугольника вне овала не загораживала бы для кликов другие объекты. |
|
|||||
|
Banned
Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
|
|
|||||
|
Lorem ipsum
|
Akopalipsis, где по ссылке про координаты овала?
__________________
Поймай яблоко 2! |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
"координаты овала"?
Делал такое для паззлов. Попробую на ходу убрать особенности своей архитектуры.. как то так package { import flash.events.Event; import flash.display.Bitmap; import flash.display.Sprite; import flash.events.MouseEvent; import flash.geom.Point; import flash.geom.Rectangle; /* * * * * * * * * * * * * @author wolsh * * * \* * * * * * * * * */ public class InteractiveBitmap extends Sprite { private var _image:Bitmap; private var _bounds:Rectangle; public function InteractiveBitmap (image:Bitmap) { _image = image; this.addChild(_image); // или this.addChild(new Bitmap(_image.bitmapData)); this.mouseChildren = false; _bounds = this.getBounds(this); if (stage) init(); else this.addEventListener(Event.ADDED_TO_STAGE, init); } private function init(event:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point this.addEventListener(Event.REMOVED, removedHandler); this.addEventListener(MouseEvent.ROLL_OVER, rollOverHandler, false, 10000, true); } /* HANDLERS */ private function removedHandler(event:Event):void { stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); } //// Когда мышь попадает в границы картинки, private function rollOverHandler(event:MouseEvent):void { this.removeEventListener(MouseEvent.ROLL_OVER, rollOverHandler, false); //// отключаем спрайту реакцию на мышь, чтобы события мыши достигали нижележащих объектов. this.mouseEnabled = false; //// Однако слушаем движение мыши через стейдж. stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); } //// после того, как мышь попала в границы картинки, на каждое движение мыши private function mouseMoveHandler(event:MouseEvent):void { //// проверяем, находится ли еще мышь в границах картинки. var mousePoint:Point = new Point(this.mouseX, this.mouseY); //// Когда мышь покидает границы картинки (картинка уже не мешает событиям мыши достигать нижних объектов), if (!_bounds.containsPoint(mousePoint)) { //// снова включаем реакцию, this.mouseEnabled = true; //// чтобы поймать ролловер в следующий раз. this.addEventListener(MouseEvent.ROLL_OVER, rollOverHandler, false, 10000, true); //// и перестаем слушать движение мыши по стейджу stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); } else //// если мышь все еще в границах картинки... { //// Когда мышь попадает на непрозрачные пиксели картинки, снова включаем реакцию на мышь; когда на прозрачные — снова отключаем. this.mouseEnabled = _image.bitmapData.hitTest(new Point(), 0x22, mousePoint); } } } }
__________________
Reality.getBounds(this); |
|
|||||
|
Banned
Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 23:17. |
|
|
« Предыдущая тема | Следующая тема » |
|
|