好了,这里就是我想要做的事:怪异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