網頁設計公司
您現在的位置:首頁  >  新聞中心
  • 軟體設計
    Software Development
  • 品牌及LOGO設計
    Brand and LOGO Design
  • 網站設計及建制
    Web Design
  • 多媒體動畫制作
    Multimedia Presentations
  • 聯絡我們
    Contact US
  • 新聞中心
    網頁設計公司必讀的文章 ( 128 ) FitStage類,全螢幕自適應超方便,有用的請享用!
    做整站的時候經常要用到屏幕適應,直接用stage的話,每次都要addEventListener!
    有了這個類,只要使用

    addFitObject(targetSprite,"center");//topleft,topcenter,topright,left,center,right,bottomleft,bottomcenter,bottomright
    就可以居中了。

    但是這樣有時候還不夠,我們需要在中心點的位置始終向左上偏移50像素該怎麼辦
    就可以這樣用
    addFitObject(targetSprite,"center",new Point(-50,-50));

    有時候我們仍然需要獲取stage的事件
    addEventListener("onStageFited",yourFunction);

    有時候我們需要不斷對層級進行轉換,例如父sprite使用center,對其子sprite使用topleft,但是在通常情況下,子sprite的坐標需要轉換到globe才行。
    這裡只要使用
    addFitObject(targetSprite,"center",new Point(-50,-50),targetSpriteParent);//targetSpriteParent為displayObject,設置為null或者this都指向當前層
    但是請注意,如果父,子sprite都使用addFitObject的話,父的執行順序必須高於子的執行順序

    還有時候我們需要針對變化過位置的某一個sprite使用事件,在這個Sprite變化完成之後觸發一個方法
    就可以這樣用
    addFitObject(targetSprite,"center",null,null,targetFunction);//targetFunction:Function

    該類使用的是單例模式,請使用getInstance()
    程序代碼 程序代碼
    package org
    {
        import flash.display.DisplayObject;
        import flash.display.Sprite;
        import flash.display.Stage;
        import flash.display.StageScaleMode;
        import flash.display.StageAlign;
        import flash.events.Event;
        import flash.events.EventDispatcher;
        import flash.geom.Point;
        import flash.errors.IllegalOperationError;
        
        /**
        * ...
        * @author ezshine
        */
        public class FitStage extends Sprite
        {
            private static var _singleton:Boolean=true;
            private static var _instance:FitStage;
            private var theStage:Stage;
            private var FitObjectArray:Array;
            public function FitStage() {
                if (_singleton) {
                     throw new Error("請使用getInstance()來獲取實例");
                }
            }
            public function setStage(_st:Stage)
            {
                if (theStage==null)
                {
                    theStage = _st;
                    FitObjectArray = new Array();
                    theStage.align = StageAlign.TOP_LEFT;
                    theStage.scaleMode = StageScaleMode.NO_SCALE
                    theStage.showDefaultContextMenu = false;
                    theStage.addEventListener(Event.RESIZE, onStageResize);
                }
            }
            public function addFitObject(...args):void//
            {
                if (args.length<2)
                {
                    return;
                }
                var _t:DisplayObject =args[0];//displayObject
                var _a:String = args[1];//_a:topleft,topcenter,topright,left,center,right,bottomleft,bottomcenter.bottomright
                var offsetPoint:Point = args[2];//offset point
                var parentObject:DisplayObject = args[3];//function name string
                var refunc:Function = args[4];//function name string
                
                var tobject:Object={t:_t,a:_a};
                if (offsetPoint)
                {
                    tobject.o=offsetPoint;
                }
                if (parentObject)
                {
                    tobject.p = parentObject;
                }
                if (args[4]!=null)
                {
                    tobject.r={runfunc:refunc};
                }
                if (parseFloat(checkTheSame(_t).toString())>=0)
                {
                    FitObjectArray[checkTheSame(_t)] = tobject;
                }else{
                    FitObjectArray.push(tobject);
                }
                onStageResize(new Event("active"));
            }
            private function checkTheSame(_t:DisplayObject)
            {
                for (var i:Number = 0; i <FitObjectArray.length; i++)
                {
                    if (FitObjectArray[i].t==_t)
                    {
                        return i;
                        break;
                    }
                }
                return false;
            }
            public function removeFitObject(_t:DisplayObject)//_a:topleft,topcenter,topright,left,center,right,bottomleft,bottomcenter.bottomright
            {
                for (var i:Number = 0; i <FitObjectArray.length; i++)
                {
                    if (FitObjectArray[i].t==_t)
                    {
                        FitObjectArray.splice(i,1);
                        break;
                    }
                }
            }
            public static function getInstance():FitStage
            {
                 if (!_instance) {
                    _singleton=false;
                    _instance=new FitStage();
                    _singleton=true;
                }
                return _instance;
            }
            private function onStageResize(e:Event)
            {
                for (var i:Number = 0; i <FitObjectArray.length; i++)
                {
                    var offsetx:Number = 0;
                    var offsety:Number = 0;
                    if(FitObjectArray[i].o){
                        offsetx=FitObjectArray[i].o.x;
                        offsety=FitObjectArray[i].o.y;
                    }
                    var nextx:Number;
                    var nexty:Number;
                    switch(FitObjectArray[i].a)
                    {
                        case "topleft":
                            nextx = 0;
                            nexty = 0;
                            break;
                        case "topcenter":
                            nextx = Math.round(theStage.stageWidth / 2);
                            nexty = 0;
                            break;
                        case "topright":
                            nextx = theStage.stageWidth;
                            nexty = 0;
                            break;
                        case "left":
                            nextx = 0;
                            nexty = Math.round(theStage.stageHeight / 2);
                            break;
                        case "center":
                            nextx = Math.round(theStage.stageWidth / 2);
                            nexty = Math.round(theStage.stageHeight / 2);
                            break;
                        case "right":
                            nextx = theStage.stageWidth;
                            nexty = Math.round(theStage.stageHeight / 2);
                            break;
                        case "bottomleft":
                            nextx = 0;
                            nexty = theStage.stageHeight;
                            break;
                        case "bottomcenter":
                            nextx = Math.round(theStage.stageWidth / 2);
                            nexty = theStage.stageHeight;
                            break;
                        case "bottomright":
                            nextx = theStage.stageWidth;
                            nexty = theStage.stageHeight;
                            break;
                    }
                    if (FitObjectArray[i].p)
                    {
                        var parentPoint:Point = new Point(Math.round(FitObjectArray[i].p.x), Math.round(FitObjectArray[i].p.y));
                        localToGlobal(parentPoint)
                        nextx -= parentPoint.x;
                        nexty -= parentPoint.y;
                    }
                    FitObjectArray[i].t.x = nextx+ offsetx;
                    FitObjectArray[i].t.y = nexty+ offsety;
                    if (FitObjectArray[i].r)
                    {
                        FitObjectArray[i].r.runfunc();
                    }
                }
                getInstance().dispatchEvent(new Event("onStageFited"));
            }
            
            public function getFitObjectList():Array
            {
                return FitObjectArray;
            }
        }
    }


    使用方法····
    import org.FitStage;//導入類
    var myStage:FitStage = FitStage.getInstance();//獲取實例
    myStage.setStage(this.stage);//寫入Stage,因為Stage只能存在於已經在場景中的個體,所以請設置一次之後(將場景賦予)再使用後面的方法。
    首頁 | 關於我們 | 新闻中心 | 聯絡我們 | 加入最愛
    Bay Stars Design 網頁設計公司 Copyright © 2005-2008 Bay Stars Design Web Design Company All risghts reserved.