2011-11-27 47 views
0

好了,我有以下的代碼結構:AS3定心對象

var environment:AvEnvironment = new AvEnvironment(stage.stageWidth, stage.stageHeight); 
addChild(environment);  
environment.addChild(new Player()); 
environment.addChild(new Terrain()); 

player類將其xy信息給environment類以便environment類將玩家對象中心。由於terrain也是父母的孩子,terrain班也將居中。但是,我不希望出現這種情況:創建遊戲時,我希望地形類位於父項的左上角(environment)。

這是我想在地形類實現代碼:

if(parent) 
      { 
       var ev:AvEnvironment = AvEnvironment(parent); 

       this.x = -ev.x 
       this.y = -ev.y 

      } 

然而,這並不在構造方法工作作爲父母返回null,我不知道爲什麼。

回答

0

我想你的地形被初始化,調用你的代碼之前,它得到一個父(addChild())。你可以在你的地形類中嘗試以下內容:

this.addEventListener(Event.ADDED_TO_STAGE, doDNATest); //Place this in your Terrain() constructor 

function doDNATest(evt:Event) { 
    //By the time this event is called you should know who the father is 
    //since this is called once Terrain is on it's parent's (environment) display list 
     if(this.parent) 
     { 
      var ev:AvEnvironment = AvEnvironment(this.parent); 
      this.x = -ev.x 
      this.y = -ev.y 
     } 
} 
+0

很棒的工作,但這實際上並不真正對齊地形,實際上它沒有改變任何東西。當我跟蹤-ev.x和-ev.y時,我得到0,0。如果我要創建一個具有與ENTER_FRAME完全相同的代碼的Event偵聽器,它將工作,除非它不會移動圖形。 – dgamma3

+0

對不起,我並不完全清楚問題的這一部分。所以你不想在(0,0)的地形?需要檢查的一件事是確保地形的影片剪輯內容全部位於正X和Y中。換句話說,確保地形的參考點位於(0,0),而不是像(-400,-300)。那麼它現在看起來是以中心爲中心的嗎?這有幫助嗎,還是我還沒有把握這個問題? – ToddBFisher