如果仅快速点击,AS3按钮会多次触发

时间:2011-09-11 21:45:36

标签: actionscript-3

好的,我写了这段代码:

import flash.events.Event;
import flash.display.MovieClip;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.MouseEvent;
import flash.display.Stage;

stop();

var loader:Loader = new Loader();
var defUrlReq = new URLRequest("indexCoontentLoad.swf");
var urlRequest:URLRequest = new URLRequest();
var myLoadedSwf:MovieClip = null;
var swfStage:Stage = this.stage;

/////////////// INITIATE LOADERS /////////////// 

loader.load(defUrlReq);

/////////////// START MAIN HANDLER FUNCTION ///////////////

/////IMPORT DEFAULT SWF /////
loader.contentLoaderInfo.addEventListener(Event.INIT, loadedHandler);
function loadedHandler(event:Event){  

    myLoadedSwf = event.target.content;
    addChild(myLoadedSwf);

    trace(myLoadedSwf);

    myLoadedSwf.gotoAndPlay("intro");
    trace("STEP 1 -- ext def swf loaded");
}
///////END IMPORT. ///////////////


///// START LISTENERS AND THEIR FUNCTIONS /////

load1.addEventListener(MouseEvent.CLICK,btn4Clicked);
load2.addEventListener(MouseEvent.CLICK,btn4Clicked);
load3.addEventListener(MouseEvent.CLICK,btn4Clicked);

///// END LISTENERS /////


///// START FUNCTIONS /////

function btn4Clicked(e:MouseEvent):void { //-- START btn4Loaded
        if (e.target == load1 || e.target == load2 || e.target == load3) {
            myLoadedSwf.gotoAndPlay("outro");

            removeChild(myLoadedSwf);

            urlRequest = new URLRequest(e.target.name+".swf");
            loader.load(urlRequest);
            addChild(myLoadedSwf);
        }

}

并且它有效,一旦点击,它就会做它必须做的事情。当然,我试图打破它,我发现如果我快速点击按钮,它将重新导入外部swfs,导致我有多个外部swf实例。

所以简而言之,如果我点击像普通(慢),就像一个人点击查看一个部分等,那么它的罚款,如果我点击快速或重复点击,即像双击等人,然后问题发生。

任何想法如何解决这个问题?

提前感谢。

编辑***这是一个测试文件的链接,以显示我的意思 http://www.somdowprod.net/4testing/flash/tst

2 个答案:

答案 0 :(得分:1)

当您在动画片段上将doubleClick设置为启用时,这将起作用。如果是双击并且只触发一次方法,则Flash运行时将检查您。如果您想听双击,可以通过更改事件处理程序。

mySprite.doubleClickEnabled = true;
mySprite.addEventHandler(MouseEvent.CLICK, onClick);
祝你好运。

答案 1 :(得分:0)

您可以尝试添加一个设置为false的布尔变量。加载.swf后,将该变量更改为true。然后不要加载swf,除非它被设置为false。这样只允许加载一次。

var isLoaded:Boolean = false;
function btn4Loaded(e:Event):void 
{ //-- START btn4Loaded
   if(!isLoaded)
   {
       if (e.target == load1 || e.target == load2) {
            myLoadedSwf.gotoAndPlay("outro");

            removeChild(myLoadedSwf);

            urlRequest = new URLRequest(e.target.name+".swf");
            loader.load(urlRequest);
            addChild(myLoadedSwf);
            isLoaded = false;
        }
    }

} // end btn4Loaded.