Страница 1 из 1

Рисование поверх Bitmap

Добавлено: 07 сен 2013, 16:23
Casperovskii
Всем привет! Столкнулся с такой проблемой: компонент graphics рисует только на фоне. То есть за всеми объектами Bitmap,добавленными на сцену. Мне же нужно рисовать через graphics поверх битмапов. Как это сделать?
Вот мой код:

Код: Выделить всё

addChild(bgImage);addChild(barBorderImage);graphics.beginFill(0x54F864);graphics.drawRect(barX,barY,Math.round((barWidth)*currProg/mProg),barHeight);

Re: Рисование поверх Bitmap

Добавлено: 07 сен 2013, 17:22
XELAD
Casperovskii
Всё через addChild будет поверх graphics. Создать отдельный Child для рисования (в контейнер с другими) и добавить ему enterFrame, где он будет постоянно перемещаться поверх всех остальных children. Это точно работает, но есть дополнительный enterFrame. Такое моё решение, использую для админ- и trace- панелей, которые всегда должны быть поверх остального.

Re: Рисование поверх Bitmap

Добавлено: 07 сен 2013, 17:26
Casperovskii
XELAD
А сработает ли так: отдельный класс/объект, где будет только graphics, и уже в нем рисовать?

Re: Рисование поверх Bitmap

Добавлено: 07 сен 2013, 20:59
XELAD
Casperovskii
Если объект класса будет добавлен через addChild, то можно что угодно, разве что добавлять его нужно поверх bitmap.

Re: Рисование поверх Bitmap

Добавлено: 07 сен 2013, 22:23
sasha^
XELAD насчет проверки в каждом кадре я считаю немного тупой идеей) лучше сделать чтобы работало событие added, которое бы при каждом изменении количества дочерних элементов ставила его на верхний уровень выражением setChildIndex(ссылка_на_спрайт, numChildren-1);

Re: Рисование поверх Bitmap

Добавлено: 08 сен 2013, 02:53
XELAD
sasha^
Отличное событие, если оно должно исполняться редко и при addChild, то самое то для использования.
Я сам в тот enterFrame ещё много чего добавляю, поэтому только сменой глубины код не ограничивается. Но да, event.ADDED, верное событие, главное добавить if(numChildren > 1), иначе error будет.

Re: Рисование поверх Bitmap

Добавлено: 08 сен 2013, 18:18
IndieGD
Можно и вовсе без событий обойтись просто переопределив метод addChild().

Код: Выделить всё

 package {    import flash.display.DisplayObject;    import flash.display.Shape;    import flash.display.Sprite;        public class MySprite extends Sprite    {        private var _canvas:Shape;                public function MySprite()        {            _canvas = new Shape();            addChildAt(_canvas, 0);        }                override public function addChild(child:DisplayObject):DisplayObject        {            return addChildAt(child, getChildIndex(_canvas));        }    }} 
Так же можно и сам геттер графикса просто переопределить да и все :)
Хотя лучше будет наверно завести еще один объект Graphics, чтоб оставить возможность и на фоне рисовать тоже.