Как заполенить клип растровым изображением?

3 views
Skip to first unread message

Вика

unread,
Jun 5, 2007, 9:23:29 AM6/5/07
to ruF...@googlegroups.com
Подскажите пожалуйста поподробнее и  если можно с примерами исходников
как делать заполнение произвольной формы клипа растровым изображением.
Клип нарисован на стадии разработки и заполнение может менятся при выполнении фильма.

GraGal

unread,
Jun 5, 2007, 9:30:36 AM6/5/07
to ruF...@googlegroups.com
Дублировать форму клипа и использовать ее как маску для растра
rastr_mc.setMask(form_mc);

--
http://web-log.ru

Roman Shuper

unread,
Jun 5, 2007, 9:31:22 AM6/5/07
to ruF...@googlegroups.com
Эта произвольная форма должна являться маской для еше одного мувика в который приаттачена BitmapData которая саморозколнирована при помощи двух циклов и метода BitmapData.copyPixels как я понимаю

Nox Noctis

unread,
Jun 5, 2007, 9:39:45 AM6/5/07
to ruF...@googlegroups.com

сжелать маску по форме клипа, положить эту маску на прямоугольник по
габаритам совпадающий с клипом и залитый растром при помощи
программного рисования: clip.lineTo(), clip.beginBitmapFill()

растровый элемент заливки нужно при этом отрисовать в объект
BitmapData и передать в метод beginBitmapFill().

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

если тебе не нужен силуэт всего клипа, значит маску нужно создать по
нужным областям.


--
Michael Antipin
______________________________________________________________________
n...@design.ru | http://www.artlebedev.ru | http://www.noregret.org

Nox Noctis

unread,
Jun 5, 2007, 9:40:43 AM6/5/07
to ruF...@googlegroups.com
> который приаттачена BitmapData которая саморозколнирована при помощи двух
> циклов и метода BitmapData.copyPixels как я понимаю

жесть :)
MovieClip.beginBitmapFill() поприятнее будет.

Roman Shuper

unread,
Jun 5, 2007, 9:38:10 AM6/5/07
to ruF...@googlegroups.com


жесть :)
MovieClip.beginBitmapFill() поприятнее будет.

Согласен :)

Вика

unread,
Jun 5, 2007, 9:41:08 AM6/5/07
to ruF...@googlegroups.com
cпасибо за такой быстрый ответ.
а можно ли как то использовать для этого функцию beginBitmapFill ?

Вика

unread,
Jun 5, 2007, 9:42:12 AM6/5/07
to ruF...@googlegroups.com

----- Original Message -----
From: "GraGal" <grag...@gmail.com>
To: <ruF...@googlegroups.com>
Sent: Tuesday, June 05, 2007 4:30 PM
Subject: [ruFlash] Re: Как заполенить клип растровым изображением?

cпасибо за такой быстрый ответ.

Nox Noctis

unread,
Jun 5, 2007, 10:45:13 AM6/5/07
to ruF...@googlegroups.com
> а можно ли как то использовать для этого функцию beginBitmapFill ?

простите за АС1 стиль, переводить в АС2 лень. :)

var getFilledCopy:Function = function():MovieClip
{
import flash.display.BitmapData;
import flash.geom.Matrix;

var bounds:Object = clip.getBounds(clip);

var d:Number = clip._parent.getNextHighestDepth();
var filledCopy:MovieClip =
clip._parent.createEmptyMovieClip("filledCopy"+d, d);

var fill:MovieClip = filledCopy.createEmptyMovieClip("fill", 0);
var mask:MovieClip = filledCopy.createEmptyMovieClip("mask", 1);

mask.cacheAsBitmap = true;
fill.cacheAsBitmap = true;
fill.setMask(mask);

// для маски
var image:BitmapData = new BitmapData(bounds.xMax-bounds.xMin,
bounds.yMax-bounds.yMin,
true, 0);
var matrix:Matrix = new Matrix(1, 0, 0, 1, -bounds.xMin,
-bounds.yMin);
image.draw(clip, matrix);
mask.attachBitmap(image, 0);
mask._x = bounds.xMin;
mask._y = bounds.yMin;

// для заливки
var fillImage:MovieClip =
fill.createEmptyMovieClip("fillImage", 0);
var loader:MovieClipLoader = new MovieClipLoader();
loader.addListener(fill);

fill.targetBounds = bounds;
fill.loader = loader;
fill.onLoadInit = function ()
{
var bmp:BitmapData = new BitmapData(this.fillImage._width,
this.fillImage._height,
true, 0);
bmp.draw(this.fillImage);

this.lineStyle(0, 0, 0)
this.moveTo(this.targetBounds.xMin, this.targetBounds.yMin);
this.beginBitmapFill(bmp);
this.lineTo(this.targetBounds.xMin, this.targetBounds.yMax);
this.lineTo(this.targetBounds.xMax, this.targetBounds.yMax);
this.lineTo(this.targetBounds.xMax, this.targetBounds.yMin);
this.lineTo(this.targetBounds.xMin, this.targetBounds.yMin);
this.endFill();

// чистка
delete this.targetBounds;
delete this.onLoadComplete;
this.loader.removeEventListener(this);
this.fillImage.removeMovieClip();
}

/*
адрес картинки.
можно всю загрузку убрать, а картинку в объект BitmapData
взять из библиотеки при помощи BitmapData.loadBitamp(linkage)
*/
loader.loadClip("http://flash-mx.ru/i/admin.gif", fillImage);

return filledCopy;
}

// clip - любой клип
var copy:MovieClip = getFilledCopy(clip);

// чисто позырить
copy.onEnterFrame = function ()
{
this._x = this._parent._xmouse;
this._y = this._parent._ymouse;

Reply all
Reply to author
Forward
0 new messages