2012-03-30 43 views
1

我正在開發一個網站,需要與AIR應用程序進行通信,我使用JavaScript進行開發,並且對動作不太瞭解。我處於早期階段,我正在使用Adobe Flash試用版來創建一些可以與javascript進行通信的swf文件,Action窗口中的代碼如下所示(大部分內容來自web示例):從Adobe Flash移動到FlashDevelop

import flash.external.ExternalInterface; 

var myText:String = "Example String"; 

ExternalInterface.addCallback("sendOutput", sendStaticTextFromAS3); 
function sendStaticTextFromAS3():void { 
    ExternalInterface.call("receiveTextFromAS3", myText); 
} 

這一切正在做的是接收從JavaScript調用,併發送回一個字符串,並要求將處理它的函數(它會變得更加複雜)。

我的問題是,Flash即將到期,併爲未來驗證項目,而不必花費在Flash上​​很多我想進入FlashDevelop。因爲我不需要舞臺上的任何對象,所以我需要編輯actionscript,所以我需要FlashDevelop。我創建的FlashDevelop一個新的AS3項目,我得到這個給出代碼:

package 
{ 
    import flash.display.Sprite; 
    import flash.events.Event; 

    /** 
    * ... 
    * @author Will Thomas 
    */ 
    public class Main extends Sprite 
    { 

     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); 
      // entry point 
     } 

    } 

} 

我猜的Adobe Flash會將此自動編譯SWF的時候,所以我不知道在哪裏我的代碼應該去,除了添加import flash.external.ExternalInterface;在頂部?

任何幫助將不勝感激,希望它是一個簡單的複製和粘貼的東西。

謝謝大家。

回答

8

您正在查看的是頂級類文檔 - 本例中描述了一個名爲Main的類,它擴展了Sprite(所有將被編譯爲.swfs的頂級文檔擴展了Sprite或MovieClip )。

你是對的,Flash Professional基本上隱藏了你的內容(儘管你可以到文檔類中進行挖掘)。但Flash Professional是一個非常有創意的工具(用於繪製/動畫)。儘管可以使用它來編寫ActionScript代碼,但這並不一定是它的優勢。

FlashDevelop是一個免費的IDE(不幸僅適用於Windows)與Adobe的Flash Builder競爭。這些適用於actionscript軟件開發。這些IDE對於初學者來說非常方便,因爲它們將自動下載並安裝所有必要的SDK,自動執行構建過程,提供項目模板,代碼完成和調試,這些都集中在IDE中。

如果您希望使用IDE來幫助您開始,那麼其中任何一個應該都可以正常工作(儘管Flash Builder是一個商業工具,我相信Flash Develop是免費的)。

但是請注意,您不需要IDE,並且可以使用完全免費的Adobe工具將.as源代碼文件編譯爲.swf文件 - 使用Adobe Flex SDK。這是一個可在Windows,Mac和Linux上運行的命令行編譯器,因此您將使用您選擇的文本編輯器來編輯.as文件。如果這是您首選的工作流程,請參閱this tutorial以幫助您入門。

我也推薦使用this excellent article開始flash遊戲開發 - 它充滿了很棒的信息和教程鏈接。

至於你的問題,你的代碼去,是的,導入與其他人的頂部,你的addCallback語句根據「入口點」評論,並且該函數成爲Main類的函數(只是像init函數 - 在一個類中它將需要一個範圍聲明,如public,protected或private)。當您將變量會將myText取決於當你會想要改變它,但是這應該現在做的事:

package 
{ 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.external.ExternalInterface; 

    /** 
    * ... 
    * @author Will Thomas 
    */ 
    public class Main extends Sprite 
    { 
    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); 
     // entry point 

     ExternalInterface.addCallback("sendOutput", sendStaticTextFromAS3); 
    } 

    protected function sendStaticTextFromAS3():void { 
     var myText:String = "Example String"; 
     ExternalInterface.call("receiveTextFromAS3", myText); 
    } 

    } 

} 

如果我還記得ExternalInterface.addCallback是如何工作的,它看起來像什麼,這將做的是,當您從javascript調用sendOutput()時,它將調用ActionScript中的sendStaticTextFromAS3方法,該方法會將「示例字符串」發送回receiveTextFromAS3()JavaScript函數 - 這是一種回送。你可能會一個一個函數來處理你的JavaScript至AS3通信,而一個單獨的函數處理您的AS3到JavaScript的通訊:

private function init(e:Event = null):void 
    { 
     removeEventListener(Event.ADDED_TO_STAGE, init); 
     // entry point 

     // Setup js-to-as listener 
     ExternalInterface.addCallback("sendTextToAS3", receiveTextFromJS); 

     // Send example text to js 
     sendTextFromAS3("Hello from ActionScript!"); 
    } 

    protected function receiveTextFromJS(text:String):void { 
     trace("Received text from js: "+text); 
     // TODO: do something with it 
    } 

    protected function sendTextFromAS3(text:String):void { 
     ExternalInterface.call("receiveTextFromAS3", text); 
    } 

你還應該注意,有安全限制使用的addCallback中所描述的ExternalInterface documentation(您的SWF必須嵌入在設置了allowScriptAccess參數的網頁上)。

希望這會有所幫助。 =)

+0

絕對有幫助,謝謝你應該給我一條腿 – will900 2012-03-30 20:34:56

+0

很好的詳細答案! +1 – 2012-09-20 16:49:19

相關問題