2011-02-15 105 views
0

好的,我打破了我的示例,以避免複雜的事情。As3按鈕被禁用

我在第一幀有2個按鈕,由一個叫做'容器'的動畫片段夾住。 MOUSE_OVER/OUT適用於按鈕影片剪輯內的動畫,並以stop()停止; (在movieclip按鈕內)。

stop(); 


container.addEventListener(MouseEvent.CLICK, clickCommand); 

function clickCommand(event:MouseEvent):void{ 
    if(event.target.name == "button1"){ 
     container.alpha = 0; 
     gotoAndStop(15); 
    } 
     if(event.target.name == "button2"){ 
     container.alpha = 0; 
     gotoAndStop(16); 
    } 
} 


container.addEventListener(MouseEvent.MOUSE_OVER, rollOverCommand); 

function rollOverCommand(event:MouseEvent):void{ 
    if(event.target.name == "button1"){ 
     event.target.gotoAndPlay(2); 

} 
    if(event.target.name == "button2"){ 
     event.target.gotoAndPlay(2); 
    } 

} 



container.addEventListener(MouseEvent.MOUSE_OUT, rollOutCommand); 

function rollOutCommand(event:MouseEvent):void{ 
    if(event.target.name == "button1"){ 
     event.target.gotoAndPlay(11); 
    } 
    if(event.target.name == "button2"){ 
     event.target.gotoAndPlay(11); 
    } 
} 

正如你可以看到,我希望容器的α0,當用戶點擊非此即彼按鈕,然後有時間軸跳到相應的幀,這取決於如果用戶選取鍵1(frame15)或按鈕2 (第16幀)。

這工作得很好。問題是我在這些框架上有一個新菜單,這些框架也位於名爲container2的影片剪輯中 - 當我使用這種方法時,他們的MOUSEOVER/OUT/CLICKs突然不工作。這裏是他們的代碼:

stop(); 

    container2.addEventListener(MouseEvent.CLICK, clickCommand2); 

function clickCommand2(event:MouseEvent):void 
{ 
    if (event.target.parent.name == "main1") 
    { 
     event.target.root.gotoAndPlay(13); 
     trace(event.target.parent.name); 
    } 
    else if (event.target.parent.name == "main2") 
    { 
     trace(event.target.parent.name); 
     event.target.root.gotoAndStop(14); 
    } 
} 


container2.addEventListener(MouseEvent.MOUSE_OVER, rollOverCommand2); 

function rollOverCommand2(event:MouseEvent):void 
{ 
    if (event.target.name == "main1","main2") 
    { 
     event.target.parent.gotoAndPlay(16); 

    } 
} 



container2.addEventListener(MouseEvent.MOUSE_OUT, rollOutCommand2); 

function rollOutCommand2(event:MouseEvent):void 
{ 
    if (event.target.name == "main1","main2") 
    { 

     event.target.parent.gotoAndPlay(21); 

    } 
} 

所以我可以得到我想要的框架,但新的按鈕(MAIN1,MAIN2)我已經把自己的殘疾是。

這是因爲我沒有移除聽衆嗎?我是否以這種錯誤的方式去做?

在此先感謝 - 非常感謝。

+0

歡迎來到社區。請查看您以前的問題,並選擇最佳答案旁邊的複選標記。 – zzzzBov 2011-02-15 22:18:16

回答

1

我打算假設您的代碼已被添加到actions,而不是添加到單獨的AS文件中。

一些建議。如果您的按鈕跨越整個時間軸,並且不移動,請確保它們位於其自己的圖層上,並且沒有新的關鍵幀,這樣可以保留同一個實例,並且事件偵聽器應該可以正常工作。

如果您的按鈕是不同的實例,則需要重新綁定跳轉到的關鍵幀上的事件偵聽器。

只要有可能,請避免使用actions來管理您的動作代碼。將您的代碼放入外部AS文件可以顯着減少代碼重複。

+0

感謝您的回覆。是的,我的代碼是在它自己的層面 - 我從現在開始將它添加到外部 - 感謝提示!我的第一組按鈕(按鈕1,按鈕2)位於框架1-11上,它們位於框架1上。第二組按鈕(main1,main2)位於它們自己的圖層上,從第12幀開始,其代碼開啓框架12.兩個按鈕的代碼位於同一圖層上。任何想法爲什麼會發生這種情況? – 2011-02-15 22:41:08