纯AS3倒影类

再此之前一段时间我曾分享过一个Flex版本的倒影类,接受uicompnent组件作为倒影目标,参考《Flex)一个Flex倒影组件类 Reflactor.as 的使用》!因为用到了一些mx类包下的类及事件,对纯flash组件无法直接支持。

 

这篇将分享一个ActionScript3 所写的倒影类,支持DisplayObject做为倒影目标,未用到flex相关类包

 

直接上代码后再解释:

/**

 * 倒影类 Reflexion 

 */

package taotao.bitmap {





import flash.display.*;

import flash.events.*;

import flash.geom.*;


public class Reflexion extends Sprite {


private var _disTarget:DisplayObject;

private var _numStartFade:Number = .3;

private var _numMidLoc:Number = .5;

private var _numEndFade:Number = 0;

private var _numSkewX:Number = 0;

private var _numScale:Number = 1;        

private var _bmpReflect:Bitmap;


// Constructor

/**

* 构造函数 

* @param set_disTarget 目标

* @param set_numStartFade

* @param set_numMidLoc

* @param set_numEndFade

* @param set_numSkewX

* @param set_numScale

* 

*/

public function Reflexion(set_disTarget:DisplayObject, set_numStartFade:Number=0.4, set_numMidLoc:Number=0.2, set_numEndFade:Number=0, set_numSkewX:Number=0, set_numScale:Number=1) {

super()

_disTarget = set_disTarget;

_numStartFade = set_numStartFade;

_numMidLoc = set_numMidLoc;

_numEndFade = set_numEndFade;

_numSkewX = set_numSkewX;

_numScale = set_numScale;


_bmpReflect = new Bitmap(new BitmapData(1, 1, true, 0));

this.addChild(_bmpReflect);

createReflection();

}


// Create reflection

private function createReflection(event:Event = null):void {


// Reflection

var bmpDraw:BitmapData = new BitmapData(_disTarget.width, _disTarget.height, true, 0);

var matSkew:Matrix = new Matrix(1, 0, _numSkewX, -1 * _numScale, 0, _disTarget.height);

var recDraw:Rectangle = new Rectangle(0, 0, _disTarget.width, _disTarget.height * (2 - _numScale));

var potSkew:Point = matSkew.transformPoint(new Point(0, _disTarget.height));

matSkew.tx = potSkew.x * -1;

matSkew.ty = (potSkew.y - _disTarget.height) * -1;

bmpDraw.draw(_disTarget, matSkew, null, null, recDraw, true);


// Fade

var shpDraw:Shape = new Shape();

var matGrad:Matrix = new Matrix();

var arrAlpha:Array = new Array(_numStartFade, (_numStartFade - _numEndFade) / 2, _numEndFade);

var arrMatrix:Array = new Array(0, 0xFF * _numMidLoc, 0xFF);

matGrad.createGradientBox(_disTarget.width, _disTarget.height, 0.5 * Math.PI);

shpDraw.graphics.beginGradientFill(GradientType.LINEAR, new Array(0,0,0), arrAlpha, arrMatrix, matGrad)

shpDraw.graphics.drawRect(0, 0, _disTarget.width, _disTarget.height);

shpDraw.graphics.endFill();

bmpDraw.draw(shpDraw, null, null, BlendMode.ALPHA);


_bmpReflect.bitmapData.dispose();

_bmpReflect.bitmapData = bmpDraw;


_bmpReflect.filters = _disTarget.filters;


this.x = _disTarget.x;

this.y = (_disTarget.y + _disTarget.height) - 1;          

}


public function reDraw():void

{

this.createReflection();

}

}

}



说明:

1、以上类参考了Dustin Andrew所写的倒影类,同时增加了一个reDraw方法,用于根据需要重绘倒影

2、使用时用类似如下方法:

var myRef:Reflexion = new Reflexion(disImg, .4, .2, 0, 0, 1);

sprCon.addChild(myRef);    

其中disImg是目标显示对象,sprCon是disImg的容器,同时也将是倒影的容器。这是一个范例效果截图:

更改你的Reflexion参数数值以达到不同效果!

 

(本文完)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值