2013-02-21 69 views
0

所以我有一个主SWF作为启动其他SWF的主菜单,它启动罚款,但当其他应用程序运行时,你仍然可以点击主菜单上的按钮...AS3 - 嵌套的SWF按钮问题

function startLoad(e:MouseEvent){ 
    var mLoader:Loader = new Loader(); 
    var mRequest:URLRequest; 

    if (e.target == btnOne){ 
     mRequest = new URLRequest("appOne.swf"); 
    } 
    else if (e.target == btnTwo){ 
     mRequest = new URLRequest("appTwo.swf"); 
    } 

    mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler); 
    mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler); 
    mLoader.load(mRequest); 
} 

我可以禁用主菜单按钮,但工作到目前为止,我还没有找到一种方法来触发主菜单重新启用它们。

+0

你想什么时候重新启用它们? – abnvp 2013-02-22 07:16:19

回答

1

当事件到达startLoad方法时,禁用从e.target获取的按钮可以改善代码的行为。然后区分每个swf的onCompleteHandler方法将使您有机会启用相应的按钮。因为我对你的按钮类一窍不通,所以我把它称为YourButtonClass,我会写disable();和enable();在下面的示例中用于禁用和启用按钮的方法。请用适当的正确类名称方法或属性设置替换它们。同时检查e.target类和按钮将避免不必要的悲剧。

function startLoad(e:MouseEvent){ 
var mLoader:Loader;  // we havent seen the river, lets not inflate our boat. 
var mRequest:URLRequest; 

if(!(e.target is YourButtonClass)) return;   // no nightmares.. 
if((e.target != btnOne)&&(e.target != btnTwo))return; // no nightmares.. 
YourButtonClass(e.target).disable();     // disable the button here 
mLoader = new Loader(); // river! inflate the boat :) 
if (e.target == btnOne){ 
    mRequest = new URLRequest("appOne.swf"); 
    mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteAppOne); 
} 
else { // we are sure it is btnTwo if not btnOne now... 
    mRequest = new URLRequest("appTwo.swf"); 
    mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteAppTwo); 
}  
mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler); 
mLoader.load(mRequest); 
} 

// this method is for enabling btnOne 
protected function onCompleteAppOne(Event: e){ 
    btnOne.enable(); 
    commonCompleteOperations(e);// if you have other operations post processing 
} 

// this method is for enabling btnTwo 
protected function onCompleteAppTwo(Event: e){ 
    btnTwo.enable(); 
    commonCompleteOperations(e);// if you have other operations post processing 
} 

// this method is for on complete common operations if you have. 
protected function commonCompleteOperations(Event e){ 
    // do some processing here, for instance remove event listener check for 
    // application domain etc... 
} 

为了预防,我会听安全错误和IO错误事件。这两个错误事件都可以通过每个按钮/文件的单个处理程序方法来处理。

+0

另外,如果您想禁用并启用* both *按钮,则可以在startLoad函数中禁用它们,并且可以实现一个使它们都返回的单个onComplete侦听器。 – Ihsan 2013-02-27 10:03:23