2012-11-10 53 views
0

好吧,這是我的問題:我有一個變量在一個名爲鏡子AS3:導入類之間的類/共享變量

public var line:Sprite = new Sprite(); 

我想使用這個變量命名影片剪輯另一個類的類。我進口類MovieClip類:

public class MovieClips extends MovieClip 
{ 
    import Mirror; 
    public function MovieClips(radius:int, _x:int, _y:int,size:int,span:int,addl:Array) 
    {.... 

但是當我嘗試做這樣的事情:

if (Mirror.line.hitTestObject(ball) == true) { 
        speedY *= -1; 
       } 

它顯示瞭如下錯誤:可能未定義的屬性線的接取通過參考與靜態類型類。我不確定我做錯了什麼?我是否以錯誤的方式導入我的課程?

回答

0

你應該通過你的Mirror對象添加到您MovieClips的物體,像下面的例子:通過使Mirror.line

package { 

    import flash.display.MovieClip; 
    import flash.display.Sprite; 
    import flash.events.Event; 

    public class Main extends Sprite 
    { 

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

     }// end function 

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

      var mirror:Mirror = new Mirror(); 
      var movieClips:MovieClips = new MovieClips(mirror); 

     }// end function 

    }// end class 

}// end package 

import flash.display.MovieClip; 

class Mirror extends MovieClip { 

    public var line:MovieClip; 

    public function Mirror():void { 

     line = new MovieClip(); 

    }// end function 

}// end class 

class MovieClips extends MovieClip { 

    public function MovieClip(mirror:Mirror):void { 

     mirror.line; 

    }// end function 

}// end class 

你也可以改善這個只讀:

class Mirror extends MovieClip { 

    private var _line:MovieClip; 

    public function get line():MovieClip { 

     return _line; 

    }// end function 

    public function Mirror():void { 

     _line = new MovieClip(); 

    }// end function 

}// end class 
0

如果你有一個類,例如Mirror,並執行類似Mirror.line的操作,那意味着你正試圖訪問一個名爲line的靜態類變量。靜態變量/方法與類相關聯,而不是該類的一個實例。

您沒有將行定義爲靜態變量,因此您會收到錯誤消息。 我不確定你希望它是一個靜態變量,但很可能你只是將類MirrorMirror的實例混淆了。

某處你有可能創建鏡子類的一個實例:
var myMirror:Mirror = new Mirror()或者如果使用的FlashPro(然後可以給它myMirror「作爲例子的一個實例)在時間軸上拖動一個實例。

您將訪問Mirror類的實例上的line。所以在上面這將是myMirror.line

導入某個類不會讓您訪問該類的任何實例,因此如果您希望能夠從MoveClips類中訪問Mirror的實例,則需要傳入對該類的引用,或者使用parent關鍵字來找到合適的範圍(因此,如果您的Mirror實例和您的MovieClips實例位於同一時間線/父級上,則可以執行Mirror(MovieClip(parent).myMirror).line--假設您的父級屬於MovieClip類型)。


如果您確實希望它作爲靜態變量,只需將靜態訪問修飾符添加到它的定義。

public static var line:Sprite 

請記住,雖然靜態變量總是在內存中,不管你是否有任何它們的實例。