时间:2010-08-13 | 栏目:图像综合 | 点击:次
DYNAMIC MASK 动态遮罩
FLASH DRAWING API除了可以让我们绘制图形外,我们还可以应用它绘制遮罩,而这种绘制的遮罩的特点就是我们可以动态的绘制.
怎样使用FLASH DRAWING API 绘制遮罩
MM提供的遮罩的有如下这几种:
代码: |
MovieClip.beginFill MovieClip.beginGradientFill MovieClip.clear MovieClip.curveTo MovieClip.endFill MovieClip.lineStyle MovieClip.lineTo MovieClip.moveTo |
代码: |
this.createEmptyMovieClip('square',0); with(_root.square) { moveTo(0,0); beginFill(0x000088) lineTo(100,0); lineTo(100,100); lineTo(0,100); endFill(); } |
代码: |
this.createEmptyMovieClip('square',0); _root.square.moveTo(0,0); _root.square.beginFill(0x000088) _root.square.lineTo(100,0); _root.square.lineTo(100,100); _root.square.lineTo(0,100); _root.square.endFill(); |
代码: |
_root.maskee.setMask(_root.square); |
代码: |
onClipEvent(load) { _root.createEmptyMovieClip('square',0); function drawSquare() { x = _root._xmouse; y = _root._ymouse; with(_root.square) { clear(); moveTo(x-50,y-50); beginFill(0x000088) lineTo(x+50,y-50); lineTo(x+50,y+50); lineTo(x-50,y+50); endFill(); } } this.setMask (_root.square) } onClipEvent(mouseMove) { drawSquare(); updateAfterEvent(); } |
代码: |
onClipEvent(load) { numY = 30; numX = 40; numPerFrame = 12; currSquare = 0; choices = new Array(); for(i = 0; i < numX*numY; i++) { choices.push(i); } _root.createEmptyMovieClip("mask", 0); this.setMask(_root.mask); function drawSquare(x,y) { with(_root.mask) { moveTo(x,y); beginFill(0x000088) lineTo(x+10,y); lineTo(x+10,y+10); lineTo(x,y+10); endFill(); } } } onClipEvent(enterFrame) { if(currSquare < numX*numY) { for(i = 0; i < numPerFrame; i++) { j = random(choices.length); t = choices[j]; choices[j] = choices[choices.length - 1]; choices.pop(); x = t % numX; y = Math.floor( t / numX ); drawSquare(x*10, y*10); } currSquare += numPerFrame; this._alpha = currSquare/(numX*numY)*100; } |
代码: |
x1 = r*sin(O) x2 = r*sin(O+dO) y1 = r*cos(O) y2 = r*cos(O+dO) |
代码: |
onClipEvent(load) { _root.stop(); dO = 3.6; r = 75; function addSlice(O) { x1 = r*Math.sin(O*Math.PI/180); x2 = r*Math.sin((O+dO)*Math.PI/180); y1 = r*Math.cos((O)*Math.PI/180); y2 = r*Math.cos((O+dO)*Math.PI/180); trace(x1 + ":" + y1); with(_root.mask) { moveTo(0,0); beginFill(0x000088); lineTo(x1,y1); lineTo(x2,y2); endFill(); } } _root.createEmptyMovieClip("mask",0); this.setMask(_root.mask); _root.mask._yscale = -100; _root.mask._x = this._x; _root.mask._y = this._y; oldLoaded = 0; } onClipEvent(enterFrame) { loaded = Math.ceil(_root.getBytesLoaded()/_root.getBytesTotal()*100); for(i = oldLoaded; i < loaded; i++) { addSlice(dO*i); } oldLoaded = loaded; } |
在上面的代码中_root.mask._yscale=-100是用来按制方向的,正向还是反向,同时我们注意到有两个变量,oldloaded和loaded.之所以有oldloade是为了存放我们之前下载的数值。
好,现在可以测试你的影片了。为了看到效果,你可以边续按两次回车。
本文源代码下载: