2014-04-19 6 views
1

아이에게 액세스하려고 시도하고 있으므로 해당 아이와 hitTest를 할 수 있지만이 오류가 발생합니다. 나를 의미하는 것이 무엇인지 이해할 수있는 충분한 시간 (As3에 처음).다른 아이 (부모)에게 추가 된 아이에 액세스 할 수 없습니다

1119: Access of possibly undefined property ground through a reference with static type flash.display:Sprite. 

일부 코드는 다음과 같습니다.

은 내가 위에서 본 오류 메시지를 얻을 때 이것은 주요 생성자에서 모든 것을 시작하고 다음 단계

 addChild(_scrollLayer); 
     //player 
     _scrollLayer.addChild(character); 
     //character.reset(); 
     //character.x = 640; 
     character.y = 0; 

     //level 
     _scrollLayer.addChild(ground); 
     ground.x = 640; 
     ground.y = 680; 


     //greenGoblin 
     _scrollLayer.addChild(goblin1); 
     goblin1.x = 500; 
     goblin1.y = 0; 

     _scrollLayer.addChild(goblin2); 
     goblin2.x = 800; 
     goblin2.y = 0; 

     _scrollLayer.addChild(goblin3); 
     goblin3.x = 100; 
     goblin3.y = 0; 

     //red Goblin 
     _scrollLayer.addChild(redGoblin1); 
     redGoblin1.x = 1100; 
     redGoblin1.y = 400; 



     while (_scrollLayer.ground.hitTestPoint(getChildAt(c).x, getChildAt(c).y, true)) 

에 추가합니다. 모든 컨테이너에 있기 때문에 그러나 hitTest이 작동하지 않는 방법 이제까지이 또한

 while (ground.hitTestPoint(getChildAt(c).x, getChildAt(c).y, true)) 

오류 메시지를, 일을하지

나는 시도는이입니다.

다음은 적중 테스트가 작동하지 않는 이유를 이해가 안 전체 히트 테스트 코드

 for (var c:int = 0; c < childrenOnStage; c++) 
     { 
      if (getChildAt(c).name == "player") 
      {  
       if (ground.hitTestPoint(getChildAt(c).x, getChildAt(c).y, true)) 
       { 
        touchingGround = true; 
        while (ground.hitTestPoint(getChildAt(c).x, getChildAt(c).y, true)) 
        { 

         OnGround(getChildAt(c)).incrementUp(); 

         if (ground.hitTestPoint(getChildAt(c).x, getChildAt(c).y, true)) 
         { 

         } 
         else 
         { 
          OnGround(getChildAt(c)).keepOnGround(); 
         } 
        } 
       } 
       else 
       { 
        touchingGround = false; 
        //trace("not touch"); 
        //character.gotoAndStop("jump"); 
       } 
      } 

//childrenOnStage is a variable. childrenOnStage = this.numChildren; 

입니다. 나는 대답, 조언 또는 팁을 부탁드립니다.

감사합니다.

+0

_scrollLayer는 방법에 의해에도 불구하고있다. – Moynul

답변

2

나는이 방법으로 히트 테스트 (나는 시각 IDE를 더 많이 사용한다.)에서 약간 녹슬지 만, 나는이 문제를 기억하고 있다고 생각한다.

제가 기억한다면 DisplayObject 객체는 프로그래밍 객체와 동일하게 선언되지 않습니다. 단지 액세스하기 위해 이름을 호출 할 수 없기 때문입니다. AS3에서는 Sprite에서 특성을 호출한다고 생각합니다. (즉, 타임 라인에서 작업했다면 다른 이야기 일 것입니다.)

다음 코드는 테스트되지 않았지만 작동해야합니다. 코드에서 DisplayObject로 'ground'가 표시되지 않으므로 "hitTestPoint"를 호출 할 수 없습니다. 따라서, 당신은 그것을 피해 가야합니다.

var mcGround:MovieClip = MovieClip(_scrollLayer.getChildByName("ground")); 
mcGround.hitTestPoint(getChildAt(c).x, getChildAt(c).y, true); 

(Amarghosh의 대답 here 덕분에 - 난 내 코드를-확인 크로스.)

+1

고마워요, 저는 현재 자고있는 중입니다. 나는 내일 체크 할거야. 먹어, 잠, 코드, 반복 – Moynul

+1

@Moynul 수면 전에 먹는 것은 분명히 좋지 않습니다. 다음과 같이하면 신체의 오류를 제한 할 수 있습니다. Eat, code, sleep, repeat –