经典论坛's Archiver

lzyy 发表于 2008-7-2 15:14

发一个阴影类

[code]class shadow
{
        /**
         *
         * @param        dest_mc 将要产生阴影的MC
         * @param        source_mc 包含图片的MC源
         * @param        start_alpha 初始透明度
         * @param        end_alpha 结束透明度
         * @param        end_ratio 最大为255,也就是到图片的最下面,如果是127则到图片的中间
         */
        static public function init(dest_mc, source_mc,start_alpha,end_alpha,end_ratio)
        {
               
                if (start_alpha == undefined)
                {
                        start_alpha = 100;
                }
                if (end_alpha == undefined)
                {
                        end_alpha = 0;
                }
                if (end_ratio == undefined || end_ratio > 255)
                {
                        end_ratio = 127;
                }
               
                //先获取一份拷贝
                var bmp:BitmapData = new BitmapData(source_mc._width, source_mc._height);
                bmp.draw(source_mc);
                var rnd = Math.round(Math.random() * 100);
                var loader_mc:MovieClip = dest_mc.createEmptyMovieClip("loader_mc"+rnd, dest_mc.getNextHighestDepth());
                loader_mc.attachBitmap(bmp, 2, "always", true);
               
                //翻转图片
                loader_mc._yscale *= -1;
                loader_mc._y += loader_mc._height;
                loader_mc.cacheAsBitmap = true;

                //创建mask
                var mask_mc:MovieClip = dest_mc.createEmptyMovieClip("mask_mc"+rnd, dest_mc.getNextHighestDepth());
                var tmp_matrix:Matrix = new Matrix();
                tmp_matrix.createGradientBox(source_mc._width, source_mc._height, Math.PI/2, 0, 0);
                mask_mc.beginGradientFill("linear",[0xff0000,0xff0000],[start_alpha,end_alpha],[0,end_ratio],tmp_matrix);
                mask_mc.lineTo(source_mc._width, 0);
                mask_mc.lineTo(source_mc._width, source_mc._height);
                mask_mc.lineTo(0, source_mc._height);
                mask_mc.lineTo(0, 0);
                mask_mc.endFill();
                mask_mc.cacheAsBitmap = true;
               
                //设置遮罩
                loader_mc.setMask(mask_mc);
        }
}[/code]

[b]使用方法[/b]
[code]var mcl:MovieClipLoader = new MovieClipLoader();
var mcl_obj:Object = new Object();
var em:MovieClip = _root.createEmptyMovieClip("em",11);
var loader:MovieClip = _root.createEmptyMovieClip("loader",10);
mcl_obj.onLoadInit = function(mc){
    //em为产生阴影的MC,mc为包含图片的MC,50是起始透明度,0是结束透明度,127表示作用范围为图片高的一半,最大为255
        shadow.init(em,mc,50,0,127);
        em._y = mc._height;
}
mcl.addListener(mcl_obj);
mcl.loadClip("http://www.live-my-life-with-yuyi.com/blog/crop.jpg",loader);[/code]

[b][url=http://www.live-my-life-with-yuyi.com/misc/demo/shadow/]Demo[/url][/b]

supergmy 发表于 2008-7-3 09:23

很有用的一个类~~从此动态倒入的图像不再孤单

libins 发表于 2008-7-3 10:58

收藏
发现版主会每隔一段时间都发一个有用的工具哦~:D

lenyes 发表于 2008-7-3 11:54

谢谢,收了。

ayewhy 发表于 2008-7-5 10:41

:D  拿来主义~

moyu0921 发表于 2008-7-5 16:15

很有用``收~:)
不过上面的类中还没导入BitmapData跟Matrix
import flash.display.BitmapData;
import flash.geom.Matrix;

naifen00 发表于 2008-7-16 16:29

弱弱的问下,这个怎么用的?谁可以给提供下源文件,在线等ing……

naifen00 发表于 2008-7-16 17:13

万分感谢楼主 -00-

页: [1]



Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.