代码之家  ›  专栏  ›  技术社区  ›  Mytheral

AS3-嵌套SWF按钮问题

  •  0
  • Mytheral  · 技术社区  · 12 年前

    所以我有一个主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);
    }
    

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

    1 回复  |  直到 12 年前
        1
  •  1
  •   Volkan    12 年前

    当事件到达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错误事件。这两个错误事件都可以由每个按钮/文件的单个处理程序方法来处理。