2011-11-27 45 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