2011-09-07 88 views
2

我在Flash中製作一個網站,用flashbuilder編碼。每當我嘗試導出我的代碼時,我一次又一次地得到相同的錯誤(TypeError =見下文)。AS3舞臺屬性空引用問題

我認爲這個問題與我的項目階段有關。無論何時我將var stageMiddenX = (stage.stageWidth/2);更改爲var stageMiddenX = 512;,代碼均可正常工作。但我不希望變化是動態的。

類型錯誤 錯誤#1009:在主()無法訪問空對象引用的屬性或方法

package { 
import flash.display.MovieClip; 

    public class main extends MovieClip{ 
    var stageMiddenX = (stage.stageWidth/2); 
    var stageMiddenY = (stage.stageHeight/2); 
    private var object1:Object1 = new Object1(); 
    private var object2:Object2 = new Object2(); 
    private var object3:Object3 = new Object3(); 
    } 
} 
+0

W4cko,我解決了你的問題,但*請爲所有聖潔的愛*,學習如何在Stack Overflow上正確格式化。 [閱讀本文](http://stackoverflow.com/editing-help)。 –

+0

@Michael Petrotta:Thx的幫助格式:P – W4cko

回答

6

這裏的問題是,stage尚未在您要求時提供。

您需要等到Event.ADDED_TO_STAGE事件被激發後纔會嘗試訪問stage

package { 
    import flash.display.MovieClip; 

    public class main extends MovieClip{ 
     private var object1:Object1 = new Object1(); 
     private var object2:Object2 = new Object2(); 
     private var object3:Object3 = new Object3(); 
     private var stageMiddenX:Number; 
     private var stageMiddenY:Number; 

     public function main(){ 
      if(stage) init(null); 
      else addEventListener(Event.ADDED_TO_STAGE, init) 
     } 

     private function init(e:Event):void { 
      removeEventListener(Event.ADDED_TO_STAGE, init); 
      stageMiddenX = (stage.stageWidth/2); 
      stageMiddenY = (stage.stageHeight/2); 
     } 
    } 
} 
+2

如果上面的類是文檔類,那麼這個過程並不是必需的。我不確定這個例子是什麼。所以+1無論如何! – Marty

+0

我想我已經想起嘗試訪問'stage'「太早」(即使在文檔類中)的問題。不過,我只是做了一個快速檢查,發現你是正確的。如果我有足夠的代表,我會投票答覆你的答案。 – Marcela

+0

馬塞拉在這一個是正確的。文檔類也不例外。 – Jacksonkr

1

把東西訪問舞臺變成一個構造函數(假設這是您的文檔類)..

package 
{ 
    import flash.display.MovieClip; 

    public class main extends MovieClip 
    { 
     public var stageMiddenX:int; 
     public var stageMiddenY:int; 

     private var object1:Object1 = new Object1(); 
     private var object2:Object2 = new Object2(); 
     private var object3:Object3 = new Object3(); 

     public function main() 
     { 
      stageMiddenX = stage.stageWidth/2; 
      stageMiddenY = stage.stageHeight/2; 
     } 
    } 
}