2012-01-29 99 views
0

每當我把我的電影的第一幀下面的代碼,它工作正常:的Flash CS5代碼位置混亂

var strGlobal:String = "Global"; 
function scopeTest() 
{ 
    trace(strGlobal); // Global 
} 
scopeTest(); 
trace(strGlobal); // Global 

但是當我刪除它,然後把它放在我的文檔類,它出現了錯誤: 「調用一個可能未定義的方法scopeTest」 「訪問未定義的屬性STRGLobal的」

我是新來的ActionScript 3,想知道什麼改變從我的主文檔類做這個簡單的例子工作。

回答

1

在同一目錄中的FLA文件創建一個名爲ScopeTest.as文件並定義以下類:

package { 
    import flash.display.MovieClip; 
    public class ScopeTest extends MovieClip { 
     var strGlobal:String = "Global"; 
     public function ScopeTest() { 
      trace(strGlobal); // Global 
     } 
    } 
} 

然後你的根項目中(文檔類):

enter image description here

然後當你運行它時,你應該得到「全局」追蹤確認它的工作原理。

0

讓我們來看看編寫一個文檔類。

步驟1:聲明包 - 包表示相對於.fla文件類存儲的.fla。如果你的文檔類是在同一目錄中的.fla,你只需要編寫:

package 

如果它是一個文件夾中,你需要添加package後。比方說,你的文檔類是在一個目錄中稱爲src

package src 

現在,多數民衆贊成排序,你應該有這樣的事情:

package 
{ 
    // 
} 

你需要做的下一件事是導入類,你需要在你的文檔類中使用。你要在你的文檔類擴展MovieClip,所以讓我們進口的是:

package 
{ 
    import flash.display.MovieClip; 
} 

這就是我們需要支付您的例子,所以現在我們移動到所需要的第三個元素,類的聲明。在這種情況下,它是由三個部分組成:

  1. 類的命名空間 - 可以是internal(如果你只想要你的類是在同一包中的類訪問)或public(在任何地方訪問項目)。
  2. 你的班級名稱。
  3. 你的課堂將會擴展什麼 - 在這種情況下,MovieClip。

總之,你會是這樣的:

public class Document extends MovieClip 

現在,你有類似下面的,這意味着你可以開始添加propertiesmethods

package 
{ 
    import flash.display.MovieClip; 

    public class Document extends MovieClip 
    { 
     // 
    } 
} 

的首先你要做的是爲你的班級創建一個constructor。構造函數在創建該類的實例時立即調用,或者在您的案例中是文檔類時立即調用該構造函數。

構造函數是通過創建一個與其包含的類名稱相同的方法來定義的。構造函數也必須是public,不返回任何內容。這裏是你的新代碼與一個空的構造函數:

package 
{ 
    import flash.display.MovieClip; 

    public class Document extends MovieClip 
    { 
     // Constructor 
     public function Document() 
     { 
      // 
     } 
    } 
} 

下一步是創建屬於你的類的屬性。在你的例子中,你使用了strGlobal:String,所以我們來補充一下。屬性通常屬於類聲明之下和構造函數之上。屬性由四部分組成:

  1. 命名空間 - 這決定了您的屬性的可訪問性。如果您省略此項,則默認值爲internal。現在,這些是基本的:
    • public - 您的財產可以從任何地方訪問您的類的實例。
    • private - 您的財產只能在課堂上使用 - 起初這似乎毫無用處,但最終您會發現自己主要使用此功能。
    • protected - 您的財產可以通過課程來擴展您的課程。
    • internal - 您的財產可以從同一包中的類訪問。
  2. 您的物業名稱。
  3. 您的物業類型。
  4. 您的物業價值。

在你的情況,strGlobal會是這個樣子:

public var strGlobal:String = "Global"; 

我們認爲添加到您的文檔類:

package 
{ 
    import flash.display.MovieClip; 

    public class Document extends MovieClip 
    { 
     // Properties 
     public var strGlobal:String = "Global"; 

     // Constructor 
     public function Document() 
     { 
      // 
     } 
    } 
} 

接下來,你需要創建你的方法scopeTest()根據你的問題。方法由5部分組成:

  1. 命名空間 - 方法使用與屬性相同的命名空間(請參見上文)。
  2. 方法名稱。
  3. 方法參數。
  4. 返回類型。
  5. 內容。

scopeTest()沒有任何參數,並且不返回任何東西,所以它會是這樣的:

public function scopeTest():void 
{ 
    trace(strGlobal); 
} 

方法,總體上屬於任何地方你的構造下面,讓我們插槽它現在:

package 
{ 
    import flash.display.MovieClip; 

    public class Document extends MovieClip 
    { 
     // Properties 
     public var strGlobal:String = "Global"; 

     // Constructor 
     public function Document() 
     { 
      // 
     } 

     // Output the value of strGlobal 
     public function scopeTest():void 
     { 
      trace(strGlobal); 
     } 
    } 
} 

現在是萬事俱備,你就可以打電話給scopeTest()從您的構造函數中。因爲構造函數是立即調用的,所以您應該在輸出面板中看到Global(假設您已經正確地在Flash IDE中鏈接到它)。

希望這會有所幫助。