<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    咖啡伴侶

    呆在上海
    posts - 163, comments - 156, trackbacks - 0, articles - 2

    as3顯示對象DisplayObject

    Posted on 2008-04-08 12:11 oathleo 閱讀(2328) 評論(0)  編輯  收藏

    AS3里所有能在舞臺(Stage)上看到的東西都繼承自 DisplayObject 。如果讓它最終顯示出來還需要使用某個 DisplayObjectContainer 的addChild() 或者 addChildAt() 方法把它加到顯示列表(display list)里。看看圖示:
    1.jpg
      顯示列表的最根部是 Stage 。Stage 是一個 DisplayObjectContainer ,所有的可見對象是它的 child 或者 child 的 child 。在一個文檔的第一幀輸入代碼:

    trace(stage.getChildAt(0));

    輸出類似于“[object Timeline0_94f120f8fa23a64ca3a80eab162a99a]”。下劃線后面的字符串是隨機的,每次都不同。刪掉時間軸上的代碼,綁定文檔到一個自定義類,如 TestStage :

    package{
    import flash.display.Sprite;? ?
    public dynamic class TestStage extends Sprite{
    public function TestStage(){
    trace(stage.getChildAt(0));
    }
    }
    }

    輸出:“[object TestStage]”。可見,Flash IDE 的默認編輯環境,也就是 AS2 里的 _root ,現在是 Stage 的第一個 child 。注意上面的代碼,我把 TestStage 類定義為 dynamic :

    public dynamic class TestStage extends Sprite{

    AS3 里 DisplayObject 不是動態類,所以如果想像以前那樣使用點語法(mc1.mc2.txt1.text)或者 getChildByName() 方法訪問 Flash IDE 創建的 MC ,必須把類定義為動態,不然會報錯:
    “ReferenceError: Error #1056: Cannot create property test_mc on TestStage.”
      現在在 Flash IDE 舞臺上隨便創建一個影片剪輯,命名為 test_mc ,修改上面的 trace 代碼為

    trace(stage.getChildAt(0).test_mc.name);

    輸出:“test_mc”。
    在 AS2 里訪問同樣的 MC 代碼為:

    trace(_root.test_mc.name);

    stage.getChildAt(0) 就是舞臺場景或者我們綁定的文檔類。所以在文檔類里我們直接

    trace(this.test_mc.name);

    在時間軸上也可以使用同樣的代碼,就像過去一樣。
      當然,前面提到,Stage 是一個 DisplayObjectContainer ,所以它有 addChild() 和 addChildAt() 方法。如果使用

    //var stage_mc:Sprite = new Sprite();...
    stage.addChild(stage_mc) ;

    將可以看到在舞臺或者文檔類中創建的所有東西都在這個新加的 stage_mc 之下。如果是

    stage.addChildAt(stage_mc,0);

    所有的東西將在這個 stage_mc 之上,_root 在這里將相當于 stage.getChildAt(1) 了。這在下面會討論到。
      下面用一張圖來加深對 DisplayObjectContainer 的理解,這是一個裝載了不同 DisplayObject 的 DisplayObjectContainer 。
    2.jpg
    那么究竟有哪些類是 DisplayObjectContainer ?直接繼承 DisplayObjectContainer 的有 Loader, Sprite, Stage 。那么它們和它們所有的子類(Sprite 的子類 MovieClip,DownloadProgressBar 等以及它們的子類)都將是 DisplayObjectContainer ,可以使用 addChild() 和 addChildAt() 方法加載 DisplayObject (DisplayObjectContainer 也繼承 DisplayObject) :

      最后來看看 AS3 中的層管理。它是完全自動的。當使用 addChild() 方法把 DisplayObject 加到一個 DisplayObjectContainer 的 display list ,它將自動獲得從0開始的連續的 index 。于是你可以用 getChildAt(0) , getChildAt(1) … 分別獲得第一個、第二個…加入顯示列表(display list)的 DisplayObject ,這比 getChildByName() 方法更有效率。如果使用 addChildAt() 方法把一個 DisplayObject 加到一個已經存在的層,如上面提到的

    stage.addChildAt(stage_mc,0);

    那么該層原有的以及所有該層之上的內容都自動上移一層(index + 1)。同樣的,當使用 removeChild() 或 removeChildAt() 方法刪除某一層的顯示內容,所有該層之上的內容都會自動下移一層(index - 1)。注意 index 始終是連續的,如果現在的 numChildren 是4,也就是現有最大的 index 是3(0,1,2,3),你將不能 addChildAt(mc,5) 或者任何比5更高的層,編譯器將報錯:
    “RangeError: Error #2006: The supplied index is out of bounds.”
      最后提一下,所有的 DisplayObject 都有一個 stage 屬性指向 Stage ,使用它的前提是該 DisplayObject 已經加入某個 DisplayObjectContainer 的 display list ,不然返回的將是 null 。


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲毛片基地4455ww| 久久香蕉国产线看观看亚洲片| 亚洲精品午夜视频| 国产成人免费ā片在线观看老同学| 亚洲国产成人VA在线观看| 污网站在线观看免费| 国产免费av一区二区三区| 亚洲国产AV无码一区二区三区| 成人午夜18免费看| 亚洲熟女乱色一区二区三区| 成全视频免费高清| 亚洲第一街区偷拍街拍| 免费久久精品国产片香蕉| 有码人妻在线免费看片| 精品亚洲一区二区三区在线播放| 国产精品福利片免费看| 国产亚洲精品美女久久久| 久久免费区一区二区三波多野| 亚洲一区中文字幕久久| 国产成人精品免费视频动漫| 亚洲偷自拍另类图片二区| 免费日本黄色网址| 久久毛片免费看一区二区三区| 亚洲VA中文字幕无码毛片| 99久久99久久免费精品小说| 亚洲一级毛片视频| 国产午夜鲁丝片AV无码免费| 男女一边摸一边做爽的免费视频| 亚洲国产精品国自产拍AV| 免费观看黄色的网站| 国产成人亚洲精品91专区高清| 亚洲人成影院在线观看| 色猫咪免费人成网站在线观看| 亚洲 日韩 色 图网站| 免费一级国产生活片| 国产好大好硬好爽免费不卡 | 亚洲成AV人在线播放无码 | 免费看黄的成人APP| 亚洲AV成人无码天堂| 国产亚洲精aa成人网站| 免费精品国产日韩热久久|