2015-04-23 70 views
0

我正在嘗試加載背景圖像,但出現錯誤,提示「錯誤:未定義屬性assetLoader的訪問」。這裏發生了什麼?AS3無法識別我剛剛聲明的變量

import flash.display.Loader; 
import flash.net.URLRequest; 
class Inventory { 
    private var assetLoader:Loader = new Loader(); 
    assetLoader.load(new URLRequest("image.png")); //error on this line 
    addChild(assetLoader); 
} 

回答

3
  1. 如果您正在使用addChild()方法必須繼承的DisplayObjectContainer功能。如果您將Inventory課程用作document課程,則必須延伸SpriteMovieClip

  2. 文檔類必須由公共訪問說明符定義。

  3. 僅全局(Class屬性定義)聲明的變量允許使用privatepublic。你不能在本地使用它(在函數內)。時間軸也不允許你使用訪問說明符。

    package 
    { 
        import flash.display.Loader; 
        import flash.net.URLRequest; 
        import flash.display.MovieClip; 
    
        public class Inventory extends MovieClip 
        { 
         private var assetLoader:Loader; 
         public function Inventory() 
         { 
          // constructor code 
          assetLoader= new Loader(); 
          assetLoader.load(new URLRequest("image.png")); //error on this line 
          addChild(assetLoader); 
         } 
        } 
    } 
    
+0

讓我爲'addChild()',我沒有注意到他沒有繼承'DisplayObjectContainer'。但是,將'assetLoader'放入構造函數中可能會誤導TS而不使用類寬屬性。考慮重新安排。另外,BotMaster是正確的,這個類可能不需要'public'類修飾符,但是如果你正在創建一個你可能在另一個項目中使用的類,那麼使用'public'會更好。 – Vesper

+0

我做了一些改變。感謝您的意見。 – Benny

2

你需要這兩條線將在構造函數中的代碼,如下所示:

import flash.display.Loader; 
import flash.net.URLRequest; 
class Inventory { 
    private var assetLoader:Loader = new Loader(); 
    public function Inventory() { 
     assetLoader.load(new URLRequest("image.png")); //error on this line 
     addChild(assetLoader); 
    } 
} 
+0

修正了assetLoader.load行上的錯誤,但是現在我在下一行出現同樣的錯誤。 – zzxjoanw

+0

不幸的是,我錯過了您沒有像接受的答案中所解釋的那樣繼承「DisplayObjectContainer」。 – Vesper

1

正確的答案是,即使是艱難的,你可以在聲明時實例化實例喜歡這裏:

private var assetLoader:Loader = new Loader(); 

你不準與這些對象之前存在的類實例工作。任何嘗試在創建Inventory實例之前訪問assetLoader屬性和方法都將失敗。構造函數是Inventory的一個實例將運行的第一段代碼,所以它是類代碼中的第一個地方,您可以開始使用類實例對象,因爲此時存在Inventory實例。 Vesper代碼示例正確顯示它。

在理論上這樣的:

private var assetLoader:Loader = new Loader(); 

等效於此:

private var assetLoader:Loader; 

public function Inventory() 
{ 
    assetLoader = new Loader(); 
} 

但實際上assetLoader創建的定時稍有不同。在構造函數中創建這些成員實例總是更好。

對於Benny:所有類都有訪問修飾符,默認爲內部。 PO類定義爲內部,因此正確地具有訪問修飾符(由於沒有指定內部缺省值)。成員變量的訪問修飾符已正確定義,並且與PO問題無關。

+0

我接受;但文檔類不會接受默認訪問說明符。 – Benny

+0

任何設置爲文檔類的類都必須公開,就像用作動作項目的主類的任何類一樣,或者Flex項目必須是公共的,或者真的是任何其他技術,應用程序的這些「主入口點」不能隱藏在任何否則這些應用程序將無法工作。 – BotMaster