PDA

Просмотр полной версии : как продублировать спрайт?


kaetano
26.10.2011, 01:45
Здравствуйте.

задача такая - есть контейнер. в нем разные шейпы. в какой-то момент надо сделать над ним дымку - приглушить то есть. для этого нужен еще один контейнер, который по форме равен исходному, но с заливкой определенным цветом.
почему-то после присвоения происходит как будто слияние спрайтов. я пытаюсь сделать видимость "дымки" меньше, а уменьшается и видимость исходного спрайта.
вот код:

//здесь задаем параметры
public function setFogParam():void {
sprFog = spr; //присваиваем спрайт "дымку" исходному
addChild(sprFog);
sprFog.alpha = 0;
var colorInfo2:ColorTransform = sprFog.transform.colorTransform;
if(_fogColor != 0){
colorInfo2.color = _fogColor;
sprFog.transform.colorTransform = colorInfo2;
}
}
//здесь вызываем саму дымку
public function setFog():void {
Tweener.addTween(sprFog, {alpha:.5, time:1, delay:0, transition:"easeOutExpo"});

}

Wolsh
26.10.2011, 01:57
BitmapData#draw()
BitmapData#copyChannel()

Добавлено через 6 минут
создаете прозрачную битмапдату размером как ваш спрайт и нужного цвета.
Делаете вторую битмапдату клонированием первой BitmapData#clone()
Отрисовываете в нее спрайт.
Копируете альфа-канал (8) битмапдаты с картинкой в альфаканал пустой битмапдаты.
Получаете плашку нужной формы и нужного цвета.
Визуализируете ее с помощью битмап.
Меняете альфу Битмапа с помощью твинера.

kaetano
26.10.2011, 02:14
BitmapData#draw()
BitmapData#copyChannel()

Добавлено через 6 минут
создаете прозрачную битмапдату размером как ваш спрайт и нужного цвета.
Делаете вторую битмапдату клонированием первой BitmapData#clone()
Отрисовываете в нее спрайт.
Копируете альфа-канал (8) битмапдаты с картинкой в альфаканал пустой битмапдаты.
Получаете плашку нужной формы и нужного цвета.
Визуализируете ее с помощью битмап.
Меняете альфу Битмапа с помощью твинера.

спасибо, попробую разобраться. пока сделала просто дроу - не очень смотрится - углы белые. и еще у меня есть текст в исходном спрайте - он не заливался цветом.

Добавлено через 11 минут
получается белый прямоугольник....
что не так, помогите еще раз, пожалуйста
public function setFogParam():void {

var bmd:BitmapData = new BitmapData(_widthOb, _heightOb + _heightTopOb);
var bmdClone:BitmapData = bmd.clone();

var colorInfo2:ColorTransform = sprFog.transform.colorTransform;
if(_fogColor != 0){
colorInfo2.color = _fogColor;
}
var rect:Rectangle = new Rectangle(0, 0, _widthOb, _heightOb + _heightTopOb);
var pt:Point = new Point(_xOb, _yOb);

bmdClone.draw(spr, null, colorInfo2);
bmd.copyChannel(bmdClone, rect, pt, BitmapDataChannel.ALPHA, BitmapDataChannel.ALPHA);

var bmp:Bitmap = new Bitmap(bmd);
this.addChild(bmp);
bmp.x = 600;
}

Wolsh
26.10.2011, 03:17
var bmd:BitmapData = new BitmapData(_widthOb, _heightOb + _heightTopOb, true, 0x00FFFFFF);

Добавлено через 2 минуты
Да, и не надо тут colorTransform. Цвет дыма задаете при создании битмапдаты, только добавляете альфу 0, чтобы получился ARGB

Добавлено через 7 минут
И pt не надо)) просто new Point(), то есть с координатами (0, 0). Вам надо просто перекинуть альфаканал из снимка Спрайта в битмапдату, закрашенную нужным цветом. Битмапдаты одинаковые, так что точка должна быть в ноль/ноль.
И rect можно получить просто взяв bmdClone.rect;