2013-04-30 39 views
1

幫助。基本上我有2個按鈕在不同的框架。如果第1幀上的按鈕被點擊,它將進入並停止在第2幀。如果第2幀上的按鈕被點擊,它將進入並停止在第1幀。我想要做的是通過外部動作來控制這個按鈕文件。沒有問題,運行的第一按鈕,而第二人似乎沒有適當的反應,並有此錯誤消息:Flash AS3外部動作腳本的錯誤控制按鈕

 
TypeError: Error #1009: Cannot access a property or method of a null object reference. 
    at src::Main/init() 
    at src::Main() 

下面的代碼:

package src 
{ 
import flash.events.Event; 
import flash.events.MouseEvent; 
import flash.display.MovieClip; 

/** 
* ... 
* @author vimoetz 
*/ 
public class Main extends MovieClip 
{ 

    public function Main():void 
    { 
     if (stage) init(); 
     else addEventListener(Event.ADDED_TO_STAGE, init); 
    } 

    private function init(e:Event = null):void 
    { 
     removeEventListener(Event.ADDED_TO_STAGE, init); 
     this.gotoAndStop("1"); 
     button1.addEventListener(MouseEvent.CLICK, gotoFrame2); 
     button2.addEventListener(MouseEvent.CLICK, gotoFrame1); 
    } 

    public function gotoFrame2 (e:MouseEvent) 
    { 
     this.gotoAndStop("2"); 
    } 

    public function gotoFrame1 (e:MouseEvent) 
    { 
     this.gotoAndStop("1"); 
    } 

} 

} 
+1

你應該在第一幀有兩個按鈕,擴展到第二個,然後設置button.visible取決於你是哪個幀。 – Kodiak 2013-04-30 08:14:50

+0

你的問題在這裏「基本上我有2個按鈕在不同的框架。」你的2個按鈕必須在第一幀,當你添加監聽器(如果你不希望它是可見的,你可以設置爲false爲第二個按鈕在舞臺上)。或者使用Cherniv解決方案僅在第二幀添加按鈕2的偵聽器。 – RafH 2013-04-30 08:43:04

+0

此方法也適用。謝謝:) – vimoetz 2013-04-30 10:18:41

回答

1

您需要刪除此行您init功能:

button2.addEventListener(MouseEvent.CLICK, gotoFrame1); 

和功能gotoFrame2變化是這樣的:

public function gotoFrame2 (e:MouseEvent) 
    { 
     this.gotoAndStop("2"); 
     if (!button2.hasEventListener(MouseEvent.CLICK)){ 
     button2.addEventListener(MouseEvent.CLICK, gotoFrame1); 
     } 
    } 
+0

它完美的作品。感謝您的幫助! :) – vimoetz 2013-04-30 10:17:45

+0

你能向我解釋這個腳本是如何工作的嗎?謝謝。 – vimoetz 2013-04-30 10:20:44

+0

RafH已經回答了你。有趣的部分是:button2.hasEventListener(MouseEvent.CLICK),意思是「只添加一次點擊偵聽器」(爲了防止在每次點擊後多次運行gotoFrame1函數) – Cherniv 2013-04-30 10:31:50