搜尋此網誌

2011年7月18日 星期一

ActionScript3.0 寫了兩個沒什麼用的function

var ss:String = "";
function EnumNameOfChild(doc:DisplayObjectContainer):void {
    for( var j = 0; j < doc.numChildren; j ++ ) {
        trace(ss + doc.getChildAt(j).name);
        if( doc.getChildAt(j) is DisplayObjectContainer ) {
            ss += "  ";
            EnumNameOfChild(doc.getChildAt(j) as DisplayObjectContainer);
        }
    }
    ss = ss.slice(0, ss.length - 2);
}
顯示舞台上所有物件的實體名稱,沒什麼實用性
只是用來看一下舞台上物件的架構而已
不過如果你是第一次寫程式,建議還是用一次看看
用法:
EnumNameOfChild(stage);
結果大概是這樣
root1
  btn_Test01
  mc_Test01
    instance1
  mc_Test02
    instance13



function FindMCObject(doc:DisplayObjectContainer, name:String):MovieClip {
    var mc:MovieClip = null;
    try {
        mc = doc.getChildByName(name) as MovieClip;
    }
    catch (e:SecurityError) {
        trace(e);
    }
    if( mc ) return mc;
    for( var j = 0; j < doc.numChildren; j ++ ) {
        if( doc.getChildAt(j) is DisplayObjectContainer ) {
            mc = FindMCObject(doc.getChildAt(j) as DisplayObjectContainer, name);
            if( mc ) return mc;
        }
    }
    return null;
}
搜尋舞台裡有沒有實體名稱叫做name的這個物件
應該稍微有點用處
用法:
var mc:MovieClip = FindMCObject(stage, "mc_Test01");
if( mc ) {
    mc.visible = true;
    mc.gotoAndPlay(0);
}

建議將元件庫裡的元件擺上舞台後,最好都能加以命名
否則你只會看到一堆instance而無從區別各個物件


沒有留言: