想要從Flash載入外部資料,其實有許多樣的方式可以善加利用,譬如:「loadVariables」、「LoadVars」、「XML」等…
然而這些從外部載入進來的資料,必然有其自己所屬的變數範圍,所以本文將探討「loadVariables」vs.「loadVariablesNum」兩者的差異~
「loadVariables」vs.「loadVariablesNum」的差異
從ActionScript 2.0 Language Reference的文件說明中,我們大概即可得知兩者間的不同,整理如下:
Global Function
loadVariables(url:String, target:Object, [method:String]) : Void
loadVariablesNum(url:String, level:Number, [method:String]) : Void
MovieClip Method
loadVariables(url:String, [method:String]) : Void
從上述我們可以知道「loadVariablesNum」是「Global Function」,而「loadVariables」則有「Global Function」和「MovieClip Method」兩種,接著我們再來推論載入的方式。
「_root == this」&「this == _level0」&「_level0 == _root」
請將下述程式寫在Frame[1]:
trace(_root == this);
trace(this == _level0);
trace(_level0 == _root);
結果為:
true
true
true
從結果即可證明「_level0」、「_root」和「this」三者之間都是指向同一個「MovieClip」,所以我們即可推論下述的載入方式都是相同的:
loadVariablesNum("test.txt",0);
loadVariables("test.txt",_level0); //Global Function
loadVariables("test.txt",this); //Global Function
loadVariables("test.txt",_root); //Global Function
_level0.loadVariables("test.txt"); //MovieClip Method
this.loadVariables("test.txt"); //MovieClip Method
_root.loadVariables("test.txt"); //MovieClip Method
為何需要「loadVariablesNum」
從上述的論點再來推測,我們是否可以直接執行「loadVariables("test.txt",_level1)」或「_level1.loadVariables("test.txt")」來取代「loadVariablesNum」呢?
答案是「否定的」~為何如此?我們來看下述這個範例:
trace(typeof(_level0));
trace(typeof(_level1));
結果:
movieclip
undefined
從上述的結果來看,「_level0」這個「MovieClip」早就存在於Flash Player裡頭了,然而「_level1」卻仍然尚未被定義的~
也就是說執行「loadVariables("test.txt",_level1)」或「_level1.loadVariables("test.txt")」,並不會為我們在「_level1」建立一個「MovieClip」,我們必須利用「loadVariablesNum("test.txt",1)」才行!!所以無論是「loadVariables」或「loadVariablesNum」,它們的變數範圍其實都隸屬於實體(時間軸)變數。
最後只要了解「Layer」、「Level」和「Depth」之間的三角關係(四),以及本文所推論及驗證的一些觀念,相信你一定可以自由運用「loadVariables」和「loadVariablesNum」。