сжелать маску по форме клипа, положить эту маску на прямоугольник по
габаритам совпадающий с клипом и залитый растром при помощи
программного рисования: clip.lineTo(), clip.beginBitmapFill()
растровый элемент заливки нужно при этом отрисовать в объект
BitmapData и передать в метод beginBitmapFill().
при этом ты получишь кеак бы "силуэт" исходного клипа, залитый растром
и заливку можно будет менять в рантайме.
если тебе не нужен силуэт всего клипа, значит маску нужно создать по
нужным областям.
--
Michael Antipin
______________________________________________________________________
n...@design.ru | http://www.artlebedev.ru | http://www.noregret.org
жесть :)
MovieClip.beginBitmapFill() поприятнее будет.
жесть :)
MovieClip.beginBitmapFill() поприятнее будет.
cпасибо за такой быстрый ответ.а можно ли как то использовать для этого функцию beginBitmapFill ?
cпасибо за такой быстрый ответ.
простите за АС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;