+ -
当前位置:首页 → 问答吧 → 倒影挡住地图闪动,有没有解决方法?

倒影挡住地图闪动,有没有解决方法?

时间:2011-07-28

来源:互联网

如题。
复制内容到剪贴板
代码:
package
{
    import flash.display.Sprite;
    import flash.display.MovieClip;
    import flash.display.GradientType;
    import flash.events.*;
    import flash.geom.ColorTransform;
    import flash.geom.Matrix;
    import flash.geom.Rectangle;
    import flash.utils.getTimer;
    import LoadXML;
    import flash.net.URLRequest;
    import flash.text.TextFormat;
    public class map_china extends MovieClip
    {
        private var sp:Sprite = new Sprite  ;
        public var stagewidth:int = stage.stageWidth;//舞台宽度;
        public var stageheight:int = stage.stageHeight;//舞台高度;
        private var zu:Array;//省名组;
        private var mcObj = {};
        private var b_x = 0.425531914893617;
        private var b_y = 0.414634146341463;
        private var sdA = 5;
        private var myxml:LoadXML;
        private var xml:XML;
        private var xmlList:XMLList;
        private var news:NewList;
        private var arr:Array;
        private var txtbg:MovieClip = new txt_bg  ;//数据显示mc
        public function map_china()
        {
            stage.showDefaultContextMenu = false;//禁止右键;
            zu = [{name:"hainan",url:"21"},{name:"aomen",url:"34"},{name:"xianggang",url:"33"},{name:"taiwan",url:"24"},{name:"guangxi",url:"20"},{name:"guangdong",url:"19"},{name:"yunnan",url:"26"},{name:"fujian",url:"11"},{name:"guizhou",url:"25"},{name:"hunan",url:"18"},{name:"jiangxi",url:"12"},{name:"zhejiang",url:"9"},{name:"chongqing",url:"23"},{name:"hubei",url:"17"},{name:"sichuan",url:"22"},{name:"anhui",url:"10"},{name:"shanghai",url:"7"},{name:"xizang",url:"27"},{name:"henan",url:"14"},{name:"jiangsu",url:"8"},{name:"shanxi1",url:"28"},{name:"qinghai",url:"30"},{name:"shandong",url:"13"},{name:"ningxia",url:"31"},{name:"shanxi",url:"4"},{name:"hebei",url:"3"},{name:"tianjin",url:"2"},{name:"gansu",url:"29"},{name:"neimenggu",url:"15"},{name:"beijing",url:"1"},{name:"liaoning",url:"5"},{name:"xinjiang",url:"32"},{name:"jilin",url:"6"},{name:"heilongjiang",url:"16"}];
            for (var k:int = 0; k < zu.length; k++)
            {
                mcObj[zu[k].name] = {name:zu[k].name,ur:zu[k].url,mapmc:mc_dt.map_mc[zu[k].name],txtmc:mc_dt.txt_mc[zu[k].name]};
                mcObj[zu[k].name].mapmc.alpha = 0;
            }
            myxml = new LoadXML("data.xml",XML_Loaded);//"dataXML.asp?t="+Math.random() * Number(getTimer())//"data.xml"
        }
        //处理XML;
        private function XML_Loaded(p_e:Event)
        {
            //XML加载,会调用这个方法
            //trace(xmlList);
            if (p_e.target.err == null)
            {
                for (var n:int = 0; n < zu.length; n++)
                {
                    mcObj[zu[n].name].mapmc.addEventListener(MouseEvent.MOUSE_OVER,lineBegin);
                    mcObj[zu[n].name].mapmc.addEventListener(MouseEvent.MOUSE_OUT,lineEnd);
                }
                //var totalcount:int = xml.descendants("datafs").length();
                xml = p_e.target.xml;
                xmlList = xml.item;
                for (var i:int = 0; i < zu.length; i++)
                {
                    mcObj[zu[i].name].mapmc.addEventListener(MouseEvent.MOUSE_OVER,addColor);
                    mcObj[zu[i].name].mapmc.addEventListener(MouseEvent.MOUSE_OUT,removeColor);
                }
            }
            else
            {
                mc_dt.addChild(txtbg);
                //加载错误数据显示mc;
                txtbg.err_txt.text = p_e.target.err;
            }
        }
        private function addColor(e:Event)
        {
            //mouseover变色
            addChild(txtbg);//加载数据显示mc;
            txtbg.alpha = 1;
            //var colorTan:ColorTransform = new ColorTransform(1,1,1,1,Math.random()*510-255,Math.random()*510-255,Math.random()*510-255,0);
            ////设置MC的颜色转换(红绿蓝透明乘数值都为1,红绿蓝偏移量为-255-255之间的随机数,透明度偏移量为0)
            var colorTan:ColorTransform = new ColorTransform  ;
            colorTan.color = 0xef3207;
            arr = new Array  ;
            for (var i:int = 0; i < zu.length; i++)
            {
                if (mcObj[zu[i].name].name == e.currentTarget.name)
                {
                    mcObj[zu[i].name].mapmc.parent.buttonMode = true;
                    mcObj[zu[i].name].txtmc.parent.buttonMode = true;
                    //trace(mcObj[zu[j].name].mapmc.x+mcObj[zu[j].name].mapmc.parent.x);
                    txtbg.x = mcObj[zu[i].name].mapmc.x + mcObj[zu[i].name].mapmc.parent.x;
                    txtbg.y = mcObj[zu[i].name].mapmc.y + mcObj[zu[i].name].mapmc.parent.y;
                    if (txtbg.x + txtbg.width + 50 > mouseX)
                    {
                        txtbg.x = txtbg.x - 150;
                    }
                    if (txtbg.x < 0)
                    {
                        txtbg.x = 0;
                    }
                    if (txtbg.x + txtbg.width > stagewidth)
                    {
                        txtbg.x = stagewidth - txtbg.width;
                    }
                    if (txtbg.y + txtbg.height + 50 > mouseY)
                    {
                        txtbg.y = txtbg.y - 100;
                    }
                    if (txtbg.y < 0)
                    {
                        txtbg.y = 0;
                    }
                    //处理XML;
                    if (xml.item[mcObj[zu[i].name].ur - 1].datafs.length() != 0)
                    {
                        for (var n:int = 0; n < xml.item[mcObj[zu[i].name].ur - 1].datafs.length(); n++)
                        {
                            news = new NewList  ;
                            news.x = 2;
                            news.y = 25 + 25 * n;
                            news.title.text = xml.item[mcObj[zu[i].name].ur - 1].datafs. @ dwmc[n];
                            news.dwid.text = xml.item[mcObj[zu[i].name].ur - 1].datafs. @ dwid[n];
                            news.dqid.text = xml.item[mcObj[zu[i].name].ur - 1].datafs. @ dqid[n];
                            news.xmmc.text = xml.item[mcObj[zu[i].name].ur - 1].datafs. @ xmmc[n];
                            news.mcval.text = xml.item[mcObj[zu[i].name].ur - 1].datafs. @ mcval[n];
                            txtbg.addChild(news);
                            arr.push(news);
                        }
                    }
                    else
                    {
                        news = new NewList  ;
                        news.x = 2;
                        news.y = 25 + 25 * n;
                        news.title.text = "此地区没有筛查中心!!";
                        news.title.setTextFormat(new TextFormat("",15,0xff0000));
                        txtbg.addChild(news);
                        arr.push(news);
                    }
                    if (txtbg.height > txtbg.touying.height)
                    {
                        txtbg.touying.height = txtbg.height + 5;
                    }
                    else
                    {
                        txtbg.height = txtbg.touying.height;
                    }
                    mcObj[zu[i].name].mapmc.addEventListener(Event.ENTER_FRAME,addAlpha);
                    function addAlpha(e:Event)
                    {
                        e.target.transform.colorTransform = colorTan;
                        e.target._alpha = e.target._alpha + 0.2;
                        if (e.target._alpha >= 1)
                        {
                            e.target._alpha = 1;
                        }
                    }
                    mcObj[zu[i].name].txtmc.addEventListener(Event.ENTER_FRAME,addtxtAlpha);
                    function addtxtAlpha(e:Event)
                    {
                        e.target.alpha = 0.7;
                    }
                }
            }
        }
        private function removeColor(e:Event)
        {
            txtbg.alpha = 0;
            txtbg.touying.height = 126;
            //mouseout变回原样
            for (var j:int = 0; j < zu.length; j++)
            {
                if (mcObj[zu[j].name].name == e.currentTarget.name)
                {
                    if (arr!=null&&arr.length > 0)
                    {
                        for (var i:int = 0; i < arr.length; i++)
                        {
                            if (txtbg.contains(arr[i]))
                            {
                                txtbg.removeChild(arr[i]);
                            }
                        }
                        arr = [];
                    }
                    mcObj[zu[j].name].mapmc.addEventListener(Event.ENTER_FRAME,removeAlpha);
                    function removeAlpha(e:Event)
                    {
                        e.target.alpha = 0;
                    }
                    mcObj[zu[j].name].txtmc.addEventListener(Event.ENTER_FRAME,addtxtAlpha);
                    function addtxtAlpha(e:Event)
                    {
                        e.target.alpha = 1;
                    }
                }
            }
        }
        //绘制倒影;
        private function lineBegin(e:MouseEvent):void
        {
            for (var i:int = 0; i < zu.length; i++)
            {
                if (mcObj[zu[i].name].name == e.currentTarget.name)
                {
                    mcObj[zu[i].name].mapmc.addEventListener(MouseEvent.MOUSE_OVER,lineDraw);
                }
            }
        }
        private function lineDraw(e:MouseEvent):void
        {
            var mcdtx:int = mc_dt.x + 5;
            var mcdty:int = mc_dt.y + 5;
            var gpx:int = txtbg.x + 2;
            var gpy:int = txtbg.y + txtbg.height - 2;
            var gpcx:int;
            //清除绘制的倒影;
            sp.graphics.clear();
            //绘制倒影定义;
            var type:String = GradientType.LINEAR;
            var color:Array = [16777215,16777215];
            var alphaAr1:Array = [0.2,0.6];
            var alphaAr2:Array = [0.6,0.2];
            var rotios:Array = [0,255];
            var matix:Matrix = new Matrix  ;
            //开始绘制的倒影;
            sp.graphics.beginGradientFill(type,color,alphaAr1,rotios,matix);
            sp.graphics.moveTo(gpx,gpy);
            //graphics.lineTo(e.target.x,e.target.y);
            for (var i:int = 0; i < zu.length; i++)
            {
                if (mcObj[zu[i].name].name == e.currentTarget.name)
                {
                    sp.graphics.lineTo(mcObj[zu[i].name].txtmc.x + mcdtx,mcObj[zu[i].name].txtmc.y + mcdty);
                }
            }
            sp.graphics.lineTo(gpx + txtbg.width - 6,gpy);
            sp.graphics.lineTo(gpx,gpy);
            sp.graphics.beginGradientFill(type,color,alphaAr2,rotios,matix);
            if (mouseX > mc_dt.width / 2 && mouseX < mc_dt.width)
            {
                gpcx = gpx + txtbg.width - 4;
            }
            else
            {
                gpcx = gpx;
            }
            sp.graphics.moveTo(gpcx - 2,gpy);
            //graphics.lineTo(e.target.x,e.target.y);
            for (var j:int = 0; j < zu.length; j++)
            {
                if (mcObj[zu[j].name].name == e.currentTarget.name)
                {
                    sp.graphics.lineTo(mcObj[zu[j].name].txtmc.x + mcdtx,mcObj[zu[j].name].txtmc.y + mcdty);
                }
            }
            sp.graphics.lineTo(gpcx,gpy - txtbg.height);
            sp.graphics.lineTo(gpcx,gpy);
            sp.graphics.endFill();
            addChild(sp);
            sp.buttonMode = false;
            sp.mouseChildren = false;
        }
        private function lineEnd(e:MouseEvent):void
        {
            //清除绘制的倒影;
            sp.graphics.clear();
        }
    }
}
源文件: ChinaMap.rar (216.11 KB)
ChinaMap.rar (216.11 KB)
下载次数: 1
2011-7-28 12:40

作者: xuxiong   发布时间: 2011-07-28

在构造函数中加一行

sp.mouseChildren =sp.mouseEnabled =false;

作者: flash023   发布时间: 2011-07-28