首页 > 其他 > 详细

as3组件检测函数

时间:2014-02-11 20:04:54      阅读:318      评论:0      收藏:0      [点我收藏+]

/**
         * 组件看不到?请使用本函数检测
         * @param target
         *
         */               
        public static function componentsNotShow(target:DisplayObject):void
        {
                // 检查基本属性
                if(!target.stage) {trace("没添加到舞台"); return;}
                if(!target.visible) {trace("visible 是 false"); return;}
                if(target.scaleX == 0) {trace("scaleX 为 0"); return;}
                if(target.scaleY == 0) {trace("scaleY 为 0"); return;}
                if(target.alpha == 0) {trace("目标是透明的(alpha 为 0)"); return;}
                if(target.width == 0) {trace("宽度 为 0"); return;}
                if(target.height == 0) {trace("高度 为 0"); return;}
               
                if(target.alpha < .3) trace("alpha 小于0.3");
                if(target.width < 2) trace("宽度小于2");
                if(target.height < 2) trace("高度小于2");
                if(target.scrollRect) trace("设置了 scrollRect, 检查是否是该属性造成的");
               
                // 检查是否为特殊组件
                var str:String;
                if("text" in target)
                {
                        str = target["text"];
                        if(str == null || str == "" || str.replace(/[                  ]+/, "") == "")
                                trace("文本为空:", "text属性未赋值,或值为空格");
                }
                if("label" in target)
                {
                        str = target["label"];
                        if(str == null || str == "" || str.replace(/[                  ]+/, "") == "")
                                trace("label属性未赋值,或值为空格", "如果与label无关可以忽略该信息");
                }
               
                // 检查位置
                var p:Point = target.localToGlobal(new Point(0, 0));
                if((p.x + target.width) < 0 || (p.y + target.height) < 0 || p.x > target.stage.stageWidth || p.y > target.stage.stageHeight)
                {
                        trace("目标位置在舞台之外");
                        return;
                }
                var bound:Rectangle = target.transform.pixelBounds;
                if(    bound.width < 2
                        || bound.height < 2
                        || bound.right < 0
                        || bound.bottom < 0
                        || bound.left > target.stage.stageWidth
                        || bound.top > target.stage.stageHeight)
                {
                        trace("目标尺寸或位置有问题");
                }
               
                // 截图检查透明区域
                var bmp:BitmapData = new BitmapData(target.width, target.height, true, 0);
                bmp.draw(target);
                var ta:Number;
                var alphaCount:int;
                var alphaStatistics:Number = 0;
                for(var w:int=0; w<bmp.width; w++)
                {
                        for(var h:int=0; h<bmp.height; h++)
                        {
                                ta = bmp.getPixel32(w, h) >>> 24;
                                if(ta == 0) alphaCount++;
                               
                                alphaStatistics += ta/0xff;
                        }
                }
                trace("目标平均透明度(alpha):", alphaStatistics/(w * h));
                trace("目标透明部分占整体比例:", alphaCount / (w * h) * 100, "%", (alphaCount == (w * h))?"目标是透明的":"");
               
                // 把组件放到最上层
                try
                {
                        var tempParent:DisplayObject = target;
                        while(tempParent.parent)
                        {
                                tempParent.parent.setChildIndex(tempParent, tempParent.parent.numChildren - 1);
                                tempParent = tempParent.parent;
                        }
                        trace("已把目标放在最上层");
                }
                catch(e:Error)
                {
                        trace("无法把目标放在最上层");
                }
               
                trace("如果上述信息无法给予帮助,请做如下检查:");
                trace("  · ", "查看目标位置是否为预定位置");
                trace("  · ", "查看目标背景是否与大背景一致");
                trace("  · ", "如果是文本组件,请检查text属性是否有值,color属性是否和背景一致");
                trace("  · ", "如果你遇到的情况不是上述情况,请告知,以便更新此函数");
        }

as3组件检测函数

原文:http://www.cnblogs.com/chinayfhuang/p/3544435.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!