博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
忽略PNG透明区域的事件(AS/Flash)
阅读量:7183 次
发布时间:2019-06-29

本文共 2958 字,大约阅读时间需要 9 分钟。

代码:
PNGLoader.as
view plaincopy to clipboardprint?
package net.l4cd.display  
{  
    import flash.display.BitmapData;  
    import flash.display.Loader;  
    import flash.display.Sprite;  
    import flash.events.Event;  
    import flash.events.IOErrorEvent;  
    import flash.events.ProgressEvent;  
    import flash.geom.Matrix;  
    import flash.net.URLRequest;  
    import flash.system.LoaderContext;  
    import flash.utils.ByteArray;  
  
    /** 
     * PNGLoader,主要解决png图片透明像素处事件的问题 
     * @author L4cd.Net 
     * 
     */  
    public class PNGLoader extends Sprite  
    {  
        private var loader:Loader = new Loader();  
        private var hit:Sprite = new Sprite();  
        public function PNGLoader()  
        {  
            addChild(loader);  
            addChild(hit);  
            hit.visible = false;  
            hit.mouseEnabled = false;  
            mouseChildren = false;  
            hitArea = hit;  
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE,complete);  
            loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,error);  
            loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,progress);  
        }  
        private function complete(e:Event):void  
        {  
            dispatchEvent(e);  
            update();  
        }  
        private function error(e:IOErrorEvent):void  
        {  
            dispatchEvent(e);  
        }  
        private function progress(e:ProgressEvent):void  
        {  
            dispatchEvent(e);  
        }  
        public function load(request:URLRequest,context:LoaderContext=null):void  
        {  
            loader.load(request,context);  
            clear();  
        }  
        public function loadBytes(bytes:ByteArray,context:LoaderContext=null):void  
        {  
            loader.loadBytes(bytes,context);  
            clear();  
        }  
        public function unload():void  
        {  
            loader.unload();  
            clear();  
        }  
        public function close():void  
        {  
            loader.close();  
            clear();  
        }  
        private function clear():void  
        {  
            hit.graphics.clear();  
        }  
        private function update():void  
        {  
            if(!loader.content)return;  
            var bit:BitmapData = new BitmapData(loader.width,loader.height,true,0x00000000);  
            bit.draw(loader);  
            //重绘图象到bit  
            clear();  
            hit.graphics.beginFill(0);  
            for(var x:uint=0;x<bit.width;x++)  
            {  
                for(var y:uint=0;y<bit.height;y++)  
                {  
                    if(bit.getPixel32(x,y))hit.graphics.drawRect(x,y,1,1);  
                }  
            }  
            //以graphics画出bit的无透明区域  
            hit.graphics.endFill();  
        }  
    }  
}  
PNGLoaderExample.as
view plaincopy to clipboardprint?
package  
{  
    import flash.display.Loader;  
    import flash.display.Sprite;  
    import flash.events.MouseEvent;  
    import flash.filters.GlowFilter;  
    import flash.net.URLRequest;  
  
    import net.l4cd.display.PNGLoader;  
  
    [SWF(width="600",height="400")]  
    /** 
     * PNGLoaderExample 
     * @author L4cd.Net 
     * 
     */  
    public class PNGLoaderExample extends Sprite  
    {  
        public function PNGLoaderExample()  
        {  
            var pl:PNGLoader = new PNGLoader();  
            pl.load(new URLRequest("10020601.png"));  
            addChild(pl);  
            pl.y = 20;  
            pl.addEventListener(MouseEvent.ROLL_OUT,o);  
            pl.addEventListener(MouseEvent.ROLL_OVER,o);  
  
            var ld:Loader = new Loader();  
            ld.load(new URLRequest("10020601.png"));  
            addChild(ld);  
            ld.x = 320;  
            ld.y = 20;  
            ld.addEventListener(MouseEvent.ROLL_OUT,o);  
            ld.addEventListener(MouseEvent.ROLL_OVER,o);  
  
            graphics.lineStyle(1);  
            graphics.drawRect(20,20,250,250);  
  
            graphics.drawRect(320,20,250,250);  
        }  
        private function o(e:MouseEvent):void  
        {  
            e.target.filters = (e.type == MouseEvent.ROLL_OVER)?[new GlowFilter()]:[];  
        }  
    }  
}  

转载地址:http://iuykm.baihongyu.com/

你可能感兴趣的文章
Linux(CentOS)下安装Dubbo管理控制台(dubbo-admin-2.5.4)
查看>>
rsyslog安装配置
查看>>
Excel写入
查看>>
我的友情链接
查看>>
802.11b网络标准
查看>>
串口编程时,出现Cannot open /dev/ttyS0 Permission denied解决
查看>>
阿里开发者们的第20个感悟:好的工程师为人写代码,而不仅是为编译器
查看>>
linux 磁盘管理
查看>>
VMWARE服务器虚拟化功能介绍
查看>>
深入搜索引擎原理
查看>>
jemalloc 内存分配管理
查看>>
mysqld源码及目录结构
查看>>
Golang walk在win及linux建立 GUI 應用程式
查看>>
Linux执行命令常见的英语语句
查看>>
elasticsearch简单JavaAPI总结
查看>>
线索化二叉树
查看>>
vimrc
查看>>
【Spark亚太研究院系列丛书】Spark实战高手之路-第一章 构建Spark集群(第四步)(1)...
查看>>
Perl语言之统计特定字符串个数
查看>>
Linux用户和组管理
查看>>