2010-12-07 57 views
1

我在我的舞臺上創建了一個按鈕。我給自己定的實例名稱init並有MainTimeline從外部腳本被稱爲:如何在外部.as腳本中調用按鈕實例?

./Project/MyFlash.fla

./Project/MyFlash_fla/MainTimeline.as

我我是Flash的初學者,試圖創建一個按鈕並在MainTimeline.as之內調用它;錯誤返回: ReferenceError: Error #1065: Variable init is not defined. at tfm::MainTimeline()

我也試過var init:Button = new Button();沒有運氣。

更具體地說,我試圖做到這一點:

function MainTimeline(){ 
    //var init:Button = new Button(); 
    init.addEventListener(MouseEvent.CLICK, begin); 
} 
function begin(){ 
    addFrameScript(0, frame1); 
} 

這些是我的進口(和我增加甚至無用的人在無奈):

import flash.display.*; 
import flash.events.*; 
import flash.net.*; 
import flash.system.*; 
import flash.utils.*; 
import flash.text.*; 
import flash.xml.*; 
import flash.media.*; 
import fl.controls.Button; 
import flash.*; 
import fl.*; 
import fl.controls.*; 

任何可能的解決方案?


更新: 我鏈接道具下的外部腳本,ClassMyFlash_fla.MainTimeline

我已經得到了錯誤,只需添加this.init.add[...]消除了「沒有定義變種」。我目前的錯誤:TypeError: Error #2007: Parameter listener must be non-nullat flash.events::EventDispatcher/addEventListener()at tfm::MainTimeline()。對不起,最初不完全清楚,但我在我的舞臺上有一個按鈕,我試圖讓它執行功能,每當點擊時,執行begin()。目前,該錯誤被返回並且begin()在沒有任何交互的情況下被執行。


更新II。 我通過在begin(event:Event){...中添加event:Event來消除最後的錯誤。一切似乎都在順利進行。儘管我留下了一個錯誤;它不影響任何東西,但我仍然希望擺脫它:ReferenceError: Error #1065: Variable init is not defined.at tfm::MainTimeline/__setProp_init_Scene1_Layer1_0()at tfm::MainTimeline() - 這是什麼?

+0

你可以用當前代碼更新嗎?引用錯誤的可能性是我建議`getChildByName`的原因。 – ocodo 2010-12-08 03:23:47

回答

0

您將需要通過主DisplayObjectContainer訪問按鈕(可能this在你的範圍內,但很難知道沒有更多的信息)

使用方法getChildByName(name:String):DisplayObject引用init按鈕。

var init:Button = this.getChildByName("init") as Button; 
init.addEventListener(MouseEvent.CLICK, begin); 

應該做你想做的。

順便說一句,不要打擾添加所有這些未使用的導入,您的主要問題是定位按鈕的顯示列表範圍。

如果您展示瞭如何在外部腳本中進行鏈接,這將會很有幫助。

+0

更新:我將stage屬性下的外部腳本,`Class`鏈接爲MyFlash_fla.MainTimeline。 – Salt 2010-12-07 23:49:58

1

我不確定這是否能解決您的問題,但如果我理解正確,您基本上希望能夠從外部腳本控制階段實例。

如果您的「按鈕」在這種情況下是一個flash對象,您變成了一個符號,並選擇了使用「Button」類型的符號,那麼您需要確保在.fla文件中庫,您可以爲Actionscript導出該符號。

控制/右擊您製作的圖書館項目並轉到「屬性」。從那裏,你需要勾選「導出腳本」框。你會想給這個自定義按鈕對象一個類名(並且舞臺上的東西將是這個類的一個實例)。

Next: 如果您的.as文件被稱爲「MainTimeline.as」,您可能需要將.fla文件的文檔類設置爲「MainTimeline」(假設它與.fla在同一目錄中)文件,它似乎是)。您可以通過點擊.fla文件中的舞臺(或者取消選擇其他所有內容)並進入屬性菜單框來完成此操作。在它所說的類的部分:[空白文本區域],您需要填寫「MainTimeline」。那麼這就意味着MainTimeline是這個swf的總體基類,並且在這個類中應該可以訪問添加到舞臺的任何實例(就好像它們是由實際的.as文件中的代碼創建的實例一樣)。

在該MainTimeline.as文件中,如果將以下文本放入其中,並且在編譯和運行swf時該按鈕變得不可見,那應該可能表明這些東西正在工作。

MainTimeline.as代碼嘗試:

package 
{ 
    import flash.display.MovieClip; 

    public class MainTimeline extends MovieClip 
    { 
     public function MainTimeline() 
     { 
      init.visible = false; 
     } 

    } 

} 

希望這有助於!