2011-09-11 40 views
1

確定,所以,我寫了這個代碼:AS3按鈕,如果點擊了快速多次發射了只有

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的多個實例。簡而言之,如果我點擊像正常(慢),即像一個人點擊查看一節等,那麼它的罰款,如果我點擊快速或重複點擊ie就像一個人,雙擊等,然後問題發生。

任何想法如何解決這個問題?

在此先感謝。

編輯***繼承人測試文件的鏈接,以顯示我的意思 http://www.somdowprod.net/4testing/flash/tst

回答

1

當您在影片剪輯上將doubleClick設置爲啓用時,這將起作用。如果是雙擊並且只觸發一次你的方法,Flash運行時會檢查你。如果你想聽雙擊,你可以通過改變事件處理程序。

mySprite.doubleClickEnabled = true; 
mySprite.addEventHandler(MouseEvent.CLICK, onClick); 

祝你好運。

+0

你好,謝謝你的時間。所以我讀了上面的回答,而這一個,我相應地改變了代碼,以補償函數名稱等方面的差異,它仍然是一個不行。我編輯了我的問題併發布了完整的代碼。再次,我複製/粘貼你的傢伙代碼,相應地改變,我得到的錯誤是這樣的:「場景1,圖層'層1',幀1,行59 \t 1119:訪問可能未定義的屬性clickCount通過靜態類型的引用flash.events:Event。 「 – somdow

+0

將事件的類型更改爲MouseEvent。 clickCount是MouseEvent的一個屬性,所以錯誤是有道理的。 編輯:改變了你的代碼。 –

+0

是的,這就是我所做的,我採取了函數名稱,並將其從「函數btn4Loaded(e:Event),更改爲函數btn4Loaded(e:MouseEvent),我得到此錯誤:」1119:訪問可能未定義的屬性clickCount與靜態類型flash.events:MouseEvent的引用。 「 – somdow

0

你可以嘗試添加一個設置爲false的布爾變量。一旦.swf被加載,然後將該變量更改爲等於true。那麼除非設置爲false,否則不要讓swf被加載。這樣它只會被允許加載一次。

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. 
相關問題