MovieClip可以包含嵌套的对象,如文本框,组件或者是在运行时attach进来的对象。Flash播放器采用“从外层到内层”的顺序来初始化一个MC或者是Component。当层级初始化开始的时候,播放器先建立最外层的对象,定义它的属性和方法。然后进入下一层级,定义其属性和方法。以此类推。这样就造成一个结果,就是当一个MC被建立时,嵌套对象的属性和方法还不可见。
为了解决这个问题,我们可以用setInterval()去检查下一层级的对象可用的时间再进行下一步的操作。

 
class ChatRoom {
	private static var chatroomID:Number = 0;
	private var chat_mc:MovieClip;
	public function ChatRoom(target:MovieClip, depth:Number) {
		// Create clip instance.
		chat_mc = target.attachMovie("ChatRoomSymbol", "chatroom"+ChatRoom.chatroomID++, depth);
		// Wait until nested clips are initialized before
		// performing any operations on them.
		var initInt = setInterval(function (cr:ChatRoom) {
			if (cr.chat_mc.userList.addItem != undefined) {
				cr.init();
				clearInterval(initInt);
			}
		}, 10, this);
	}
	public function init():Void {
		// Hardcode some dummy data for this example.
		setUserList([{label:"Colin", data:"User1"}, {label:"Derek", data:"User2"}, {label:"James", data:"User3"}]);
	}
	public function setUserList(list:Array):Void {
		chat_mc.userList.dataProvider = list;
	}
}
 

当你需要在创建一个MC后马上就对其嵌套MC的自定义属性和方法进行操作,就必须用setInterval()的方法。但是这些嵌套元素的“固有”属性和方法(如gotoAndPlay()等等)是立即可用的。

翻译自O'Reilly-《Essential ActionScript 2.0》

« »