2011-04-02 80 views
0

我有一個Air Application(Adobe Flash CS4,Adobe AIR 1.1,ActionScript 3.0)。我已經將它發佈爲* .air文件並將其安裝在我的電腦上。它運行良好。但是,當我試圖使用它在其他計算機上,我發現了以下問題:已發佈Adobe Air應用程序問題

  1. 我安裝了空氣http://get.adobe.com/ru/air/
  2. 我安裝我的Main.air並啓動它。
  3. 它無法正確解析XML文件(pattern.xml)。

我的應用程序的代碼如下:

public class Main extends MovieClip {    
    public function Main():void 
    { 
     this.stop(); 
     var file:File = File.applicationDirectory.resolvePath("pattern.xml"); 
     var fileStream = new FileStream(); 
     fileStream.open(file, FileMode.READ); 
     var str:String = fileStream.readUTFBytes(fileStream.bytesAvailable); 
      str=str.substr(1);  
     var panoramaPattern=new XML(str); 
     fileStream.close(); 
    } 
} 

我試圖在主要的置評幾個命令()。所以,代碼沒有工作

var panoramaPattern=new XML(str); 

這個命令有什麼問題? pattern.xml包含在「包含的文件」中。

回答

-1

我找到了解決方案。

  1. 我已經改變pattern.xml的編碼爲ANSI

  2. 我已經改變XML負載算法this one

它的工作原理!

1

我想象一下發生的事情是,只要你的swf的主要類在這裏(上面)創建(在初始化時),ENTER_FRAME事件綁定事件監聽器到按鈕,但按鈕在技術上並不存在。你在這裏初始化的方法是非常糟糕的做法,但請允許我解釋這是如何工作的。當你有一個擴展DisplayObject類的類時,你總是應該創建一個修改過的構造函數來檢測「stage」元素,如果它不存在,那麼監聽ADDED_TO_STAGE事件,然後在回調中執行基於顯示對象的初始化。這是因爲基於顯示對象的類是以一種半途而廢的方式創建的。構造函數在類被創建/實例化時立即被調用,但是該類的屬性和方法(包括作爲顯示對象的子對象(在本例中爲按鈕等))只有在類被添加到全局「舞臺「的對象。

對於AIR,您的NativeWindow對象包含該「NativeWindow」的所有子項都繼承的單個「stage」實例。因此,當您向舞臺添加MovieClip或Sprite等時,該顯示對象的「stage」屬性將填充NativeWindow中包含的全局舞臺對象的引用。所以一定要記住,在處理構造函數/初始化顯示對象時,閃存的做法是將所有功能延遲到僅當全局「stage」可用於引用時才處理的回調。下面是使用代碼的例子:

public class Main extends MovieClip {  

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

    //Can be private or public, doesn't matter private is better practice 
    private function init(e:Event = null) 
    { 
     //Notice the function paramter has a default value assigned of null. This is required so we can call this function without args as in the constructor  

     //Also the flag variable is not necessary because this function is called once 
     btnDialogCreate.addEventListener(MouseEvent.CLICK,CreateProject);   
    } 

    //Also it is generally considered bad practice to put capitals on the start of your function/variable names. Generally only classes are named this way ie: Main. 
    public function createProject(e:MouseEvent){ 
     //You do not need a try/catch statement for simply opening a file browser dialogue. This is a native method you're invoking with a native, predefined default directories inside the VM. Flash is already doing this for you 
     var directory:File=File.documentsDirectory; 
     directory.browseForDirectory("Directory of project"); 
    } 

} 

最後,我會強烈建議看一些本網站上的免費視頻教程,因爲有廣泛的議題覆蓋,將教你很多關於閃光。

http://gotoandlearn.com/

相關問題