
Reflection如下
package com.DNight.imgManage
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.GradientType;
import flash.geom.Matrix;
import flash.display.SpreadMethod
import flash.display.BlendMode
/**
* ...
* @author DN
*/
public class Reflection extends Sprite
{
private var _img:Bitmap;
private var _distance:Number;
private var _offset:Number;
private var _reflectionImgData:BitmapData
private var _reflectionImg:Bitmap;
private var _reflectionContainer:Sprite;
private var _reflectionLight:Sprite;
/**
* 构造函数
* @param newImg 倒影图片对象
* @param distance 倒影与图片距离
* @param offset 倒影偏移量
*/
public function Reflection(newImg:Bitmap,distance:Number,offset:Number=100)
{
_img = newImg;
_distance = distance;
_offset = offset;
addChild(_img);
initReflection();
}
private function initReflection() {
var imgData:BitmapData = _img.bitmapData;
_reflectionImgData = imgData.clone();
_reflectionImg = new Bitmap(_reflectionImgData);
_reflectionContainer = new Sprite();
_reflectionImg.scaleY *= -1;
_reflectionImg.y = _img.y + (_img.height*2) + _distance;
_reflectionContainer.addChild(_reflectionImg);
_reflectionContainer.blendMode = BlendMode.LAYER;
_reflectionLight = new Sprite();
var fillType:String = GradientType.LINEAR;
var colors:Array = [0x000000, 0xFFFFFF];
var alphas:Array = [1, 0];
var ratios:Array = [0, 0xFF];
var matr:Matrix = new Matrix();
matr.createGradientBox(_img.width,_img.height , Math.PI / 2, 0, _offset+_distance);
var spreadMethod:String = SpreadMethod.PAD;
_reflectionLight.graphics.beginGradientFill(fillType, colors, alphas, ratios, matr, spreadMethod);
_reflectionLight.graphics.drawRect(0, _img.y+_img.height+_distance, _img.width, _img.height);
_reflectionLight.graphics.endFill();
_reflectionLight.blendMode = BlendMode.ALPHA;
_reflectionContainer.addChild(_reflectionLight);
this.addChild(_reflectionContainer);
}
}
}
使用方法
package
{
import com.DNight.imgManage.Reflection;
import flash.display.Bitmap;
import flash.display.Loader;
import flash.display.Sprite;
import flash.net.URLRequest;
import flash.events.Event
/**
* ...
* @author DN
*/
public class Main extends Sprite
{
public static const IMG_PATH:String = "img/img_01.jpg";
private var _reflection:Reflection
public function Main()
{
loadImg();
}
private function loadImg() {
var loader:Loader = new Loader();
var request:URLRequest = new URLRequest(Main.IMG_PATH);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onImgLoadedHandle);
loader.load(request);
}
private function onImgLoadedHandle(event:Event) {
var img:Bitmap = event.currentTarget.content as Bitmap;
_reflection = new Reflection(img,10);
this.addChild(_reflection);
}
}
}
传递Bitmap进入倒影类.然后addChild倒影,可能还有能倒影swf或者其他类型显示对象的,这个只验证了bitmap其他的不知道用这种方法是否实用?