|
主要碰到问题
swfA调用swfB,然后swfB还要调用外部的txt
用到_root时,会有冲突
Quote:_lockroot (MovieClip._lockroot 屬性)
public _lockroot :Boolean
是一個布林值,指定在將 SWF 檔載入影片片段時,_root 應參照的項目。_lockroot 屬性的預設值為 undefined。您可以在正在載入的 SWF 檔內部設定這個屬性,或是在正在載入影片片段的處理常式中設定亦可。
例如,假設您有一部名稱叫 Games.fla 的文件,它可以讓使用者選擇要玩的遊戲,並將遊戲 (例如,Chess.swf) 載入 game_mc 影片片段中。您要確認的是,載入至 Games.swf 之後,在 Chess.swf 中任何 _root 的使用都是指 Chess.swf 中的 _root (而不是指 Games.swf 中的 _root)。如果您可存取 Chess.fla 並將它發佈到 Flash Player 7 或更新的版本,則可在主要時間軸上對它新增這個陳述式:
this._lockroot = true;
如果您無法存取 Chess.fla (例如,正在從別人的網站將 Chess.swf 載入至 chess_mc),則可在載入時設定 Chess.swf 的 _lockroot 屬性。將下列 ActionScript 置於 Games.fla 的主時間軸上:
chess_mc._lockroot = true;
在這種狀況下,只要 Games.swf 是發佈於 Flash Player 7 或更新版本,Chess.swf 就可發佈於 Flash Player 的任何版本。
呼叫 loadMovie() 時,請將載入器影片中的 MovieClip._lockroot 屬性設為 true,如下列程式碼所示。如果您並未將載入器影片中的 _lockroot 設為 true,則對載入影片點中 _root 的參照將轉為參照載入器的 _root,而不是參照載入影片的 _root:
myMovieClip._lockroot = true;
適用版本:ActionScript 1.0;Flash Lite 2.0
範例
在下列範例中,lockroot.fla 中的 _lockroot 已套用到主 SWF 檔。如果 SWF 檔是載入至另一個 FLA 文件,_root 將永遠參照 lockroot.swf 的範圍,以避免產生衝突。將下列 ActionScript 置於 lockroot.fla 的主時間軸上:
this._lockroot = true;
_root.myVar = 1;
_root.myOtherVar = 2;
trace("from lockroot.swf");
for (i in _root) {
trace(" "+i+" -> "+_root);
}
trace("");
可以追蹤下列資訊:
from lockroot.swf
myOtherVar -> 2
myVar -> 1
_lockroot -> true
$version -> WIN 7,0,19,0
下列範例將載入兩個 SWF 檔,lockroot.swf 和 nolockroot.swf。lockroot.fla 文件包含了來自上一個範例的 ActionScript。nolockroot FLA 檔則是在時間軸的「影格 1」上置入下列程式碼:
_root.myVar = 1;
_root.myOtherVar = 2;
trace("from nolockroot.swf");
for (i in _root) {
trace(" "+i+" -> "+_root);
}
trace("");
lockroot.swf 檔已經套用 _lockroot,nolockroot.swf 則沒有。載入檔案之後,每個檔案會從它們的 _root 範圍傾印變數。將下列 ActionScript 置於 FLA 文件的主時間軸上:
this.createEmptyMovieClip("lockroot_mc", this.getNextHighestDepth());
lockroot_mc.loadMovie("lockroot.swf");
this.createEmptyMovieClip("nolockroot_mc", this.getNextHighestDepth());
nolockroot_mc.loadMovie("nolockroot.swf");
function dumpRoot() {
trace("from current SWF file");
for (i in _root) {
trace(" "+i+" -> "+_root);
}
trace("");
}
dumpRoot();
可以追蹤下列資訊:
from current SWF file
dumpRoot -> [type Function]
$version -> WIN 7,0,19,0
nolockroot_mc -> _level0.nolockroot_mc
lockroot_mc -> _level0.lockroot_mc
from nolockroot.swf
myVar -> 1
i -> lockroot_mc
dumpRoot -> [type Function]
$version -> WIN 7,0,19,0
nolockroot_mc -> _level0.nolockroot_mc
lockroot_mc -> _level0.lockroot_mc
from lockroot.swf
myOtherVar -> 2
myVar -> 1
沒有套用 _lockroot 的檔案也包含了根 SWF 檔所包含的所有其它變數。如果不能存取 nolockroot.fla,您可以使用下列已加入至主時間軸的 ActionScript 來變更前一個主 FLA 文件中的 _lockroot:
this.createEmptyMovieClip("nolockroot_mc", this.getNextHighestDepth());
nolockroot_mc._lockroot = true;
nolockroot_mc.loadMovie("nolockroot.swf");
之後便可以追蹤下列資訊:
from current SWF file
dumpRoot -> [type Function]
$version -> WIN 7,0,19,0
nolockroot_mc -> _level0.nolockroot_mc
lockroot_mc -> _level0.lockroot_mc
from nolockroot.swf
myOtherVar -> 2
myVar -> 1
from lockroot.swf
myOtherVar -> 2
myVar -> 1
請參閱
_root 屬性、_lockroot (MovieClip._lockroot 屬性)、attachMovie (MovieClip.attachMovie 方法)、loadMovie (MovieClip.loadMovie 方法)、onLoadInit (MovieClipLoader.onLoadInit 事件偵聽程式)
--------------------------------------------------------------------------------
|