【问题标题】:AS3 - Nested SWF Button ProblemsAS3 - 嵌套 SWF 按钮问题
【发布时间】:2013-02-21 18:13:03
【问题描述】:

所以我有一个主 SWF 作为启动其他 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);
}

我可以禁用主菜单按钮,这很有效,但到目前为止我还没有找到触发主菜单以重新启用它们的方法。

【问题讨论】:

  • 您希望何时重新启用它们?

标签: actionscript-3 flash actionscript flash-builder flash-cs6


【解决方案1】:

当事件到达 startLoad 方法时禁用从 e.target 获得的按钮将改善代码的行为。然后区分每个 swf 的 onCompleteHandler 方法将使您有机会重新启用相应的按钮。

由于我对你的按钮类一无所知,所以我称之为YourButtonClass,我会写disable();和启用();在下面的示例中,用于禁用和启用按钮的方法。请用适当的正确类名方法或属性设置替换它们。同时检查 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 错误事件。两个错误事件都可以由每个按钮/文件的单个处理程序方法处理。

【讨论】:

  • 另外,如果你想禁用和启用 both 按钮,你可以在 startLoad 函数中禁用它们,并且可以实现一个 onComplete 监听器来启用它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-07
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多