好了,這裏就是我想要做的事:怪異AS3變量行爲
我有上有3個按鈕的登陸頁面,和我有3個對應的外部SWF文件,每一個按鈕...所以用戶點擊一個按鈕並將相應的swf文件加載到舞臺上的空白MC中。現在,每個外部swf文件還包含多個按鈕,單擊這些按鈕時每個按鈕都會觸發單擊事件,每個swf中的每個按鈕事件均基於按鈕名稱和swf文件名稱進行唯一命名(例如:swf1_button1_click)So在單擊按鈕後的主SWF文件中,循環顯示3個主按鈕,併爲每個按鈕添加偵聽器,以便偵聽「swf1_button1_click」,「swf1_button2_click」,「swf2_button1_click」等各個按鈕的內容。 。 等等等等。
現在,這一切工作,剪輯正確加載,事件觸發,並聽取讚許意思是空剪輯確實收到「swf1_btn1_click」事件,它正確地觸發與該事件相關的代碼,但問題是與該函數所謂的,這是有問題的代碼...
用於加載外部SWF文件的功能:
function loadCommunity(e:MouseEvent) {
var mLoader:Loader = new Loader();
var community:String = MovieClip(e.currentTarget).name;
trace("Loading " + community);
var mRequest:URLRequest = new URLRequest(DevSite+"/flash/" + community + ".swf?community=" + community);
mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, displayCommunity);
mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, function(e:ProgressEvent) {
var percent:Number = e.bytesLoaded/e.bytesTotal;
percent = Math.round(percent * 100);
trace(percent + "% loaded");
});
mLoader.load(mRequest);
}
分配事件偵聽器的代碼:
function displayCommunity(e:Event) {
for (var i = 0; i < mcCommunityHolder.numChildren; i++) {
mcCommunityHolder.removeChild(mcCommunityHolder.getChildAt(i));
}
mcCommunityHolder.alpha = 0;
mcCommunityHolder.visible = true;
mcCommunityHolder.addChild(e.currentTarget.content);
TweenLite.to(mcCommunityHolder, 1, {alpha:1, easing:Elastic.easeOut});
var newClip:MovieClip = MovieClip(mcCommunityHolder.getChildAt(mcCommunityHolder.numChildren - 1));
for each (var mc:MovieClip in mcCommunities) {
var commName:String = mc.name.toLowerCase();
trace(" ... " + commName + " ... ");
newClip.addEventListener(commName + "_btnMap", function(e:Event) { trace("clicked: " + commName); viewLotmap(commName); });
newClip.addEventListener(commName + "_btnLocation", function(e:Event) { trace("clicked: " + commName); viewLocationmap(commName); });
newClip.addEventListener(commName + "_btnAriel", function(e:Event) { trace("clicked: " + commName); arielPhotos(commName); });
newClip.addEventListener(commName + "_btnRegister", function(e:Event) { trace("clicked: " + commName); communityRegister(commName); });
}
}
所以我得到的是:無論外部swf的按鈕,我點擊了其中的按鈕的事件,就好像我在哪裏點擊從外部swf 3內的按鈕...有道理?我點擊按鈕1,外部swf 1加載並顯示,在外部swf 1中點擊按鈕1,它觸發其事件「swf1_btn1_click」並且主要swf看到它,但是當此功能(「 communityRegister(commName);「)在偵聽器事件中被調用,」commName「始終是相同的值(主swf的btn3應具有的值)。
所以我的主要閃存塊是對待每一個外部swfs事件,就好像它們來自外部swf 3一樣。我可以解釋它的最好方法是:它處理「commName:String」就好像它在哪裏引用變量和何時我在循環的每一次迭代中都提交它,它以前的用法也會更改爲新的值,所以每次使用它時總是將其設置爲上次分配的值的值...
Gahh !!,什麼是腦殘,哈哈......我以前曾經有過這個問題很多次,但從未真正弄明白過。我一直設法重新編寫代碼,直到修復它的自我,但我厭倦了這樣做,我想知道爲什麼會發生這種情況。我對其他編碼方式不感興趣,我需要知道是怎麼回事,導致這種行爲,所以不要害羞得到技術;)
在此先感謝。
外觀極好!我現在明白了,不知道爲什麼我沒有看到過,但現在我知道了,感謝您的幫助:) – gbinflames 2010-10-01 17:52:47