2011-04-18 3 views
1

안녕하세요, 저는 영화 클립의 인스턴스 x 개를 만들고 싶습니다. 그러나 다음은 작동하지 않습니다 장면 1, 레이어 '레이어 1', 프레임 :AS 3.0 동적 인스턴스 이름

package {

import flash.display.MovieClip; 
public class CustomClass extends MovieClip { 

    public function CustomClass(amount:uint) { 
     var Collector:Array = new Array(); 

     //Add and position Tiles to stage. 
     for (var i:uint = 1; i <= amount; i++){ 
      var newMovieClip:MovieClip = new MovieClip; 
      newMovieClip.y = amount * 10; 
      Collector.push(newMovieClip); 
     } 
     addChild(Collector); 
    } 
} 

}

내가

 
var customClass_mc:CustomClass = new CustomClass(10); 
addChild(customClass_mc); 

//try to trace the x position of one of the instances. 
trace(customClass_mc.Collector[5].x); 

나는 오류가 계속 함께 타임 라인을 위치 싶습니다 1, Line 5 1119 : 정적 유형 CustomClass를 사용하여 참조를 통해 가능한 정의되지 않은 속성 수집기에 액세스합니다.

답변

1

나는 내 생각에 다른 답을 찾았습니다.

용기가 전혀 필요하지 않습니다.

다음

package { 

    import flash.display.MovieClip; 
    public class CustomClass extends MovieClip { 

     public function CustomClass(amount:uint) { 

      //Add and position Tiles to stage. 
      for (var i:uint = 1; i <= amount; i++){ 
       var newMovieClip:MovieClip = new MovieClip; 
       newMovieClip.y = amount * 10; 
       newMovieClip.name = "clip"+i; 
       addChild(newMovieClip); 
      } 
     } 
    } 
} 

없음 내가 사용하여 영화 클립을 액세서 수 있습니다 사용하지 않을 때 :

var customClass_mc:CustomClass = new CustomClass(10); 
addChild(customClass_mc); 

//try to trace the x position of the fifth instance. 
trace(customClass_mc.getChildByName("child5").y); 
2

첫째, 당신은 public으로 수집기를 선언해야합니다

public var Collector:Array = new Array(); 

귀하의 콜렉터는 배열이 아닌 표시 객체이고, 그래서는 디스플레이 트리에 추가 할 수 없습니다. 대신에 각 newMovieClip을 Custom 클래스의 디스플레이로 밀어 넣고 for 루프 안에 배치합니다. 당신이 getChildAt()를 사용하여 영화 클립을 대상으로 할 수 있기 때문에 그럼 당신은 전혀 콜렉터가 필요하지 않습니다 :

trace(customClass_mc.getChildAt(5).x); 
+0

환상적인에서, getChildAt 방법은 작동한다! 그 외에 Collector를 공개하면 1114 : 공용 속성은 패키지 내에서만 사용할 수 있습니다. 좋은 일은 더 이상 필요 없어! – Tieme

+2

죄송합니다, 거기에 약간의 설명을 놓쳤습니다. 예제의 마지막 줄에서와 같이 클래스 생성자 외부에서 콜렉터에 액세스하려면 클래스 속성으로 만들어야합니다. 그렇게하기 위해서 당신은 생성자 함수 밖에서 그것을 이동시키고'public' 키워드를 추가하십시오. – shanethehat

+0

그래, 잘됐다! – Tieme

0

변수 '콜렉터'는 생성자 내부에 당신이이 방법 만 사용할 수 있습니다. 컬렉터는 공개되지 않아 타임 라인 외부에서 액세스 할 수 있어야합니다. 가장 좋은 방법은 public getter 메서드를 사용하여이 메서드에 액세스하는 것입니다. 그래서 뭔가는 다음과 같습니다.

import flash.display.MovieClip; 
public class CustomClass extends MovieClip { 

    private var Collector:Array = new Array(); 

    public function get Collector():Array 
    { 
     return Collector; 
    } 

    public function CustomClass(amount:uint) { 

     //Add and position Tiles to stage. 
     for (var i:uint = 1; i <= amount; i++){ 
      var newMovieClip:MovieClip = new MovieClip; 
      newMovieClip.y = amount * 10; 
      Collector.push(newMovieClip); 
     } 
     addChild(Collector); 
    } 
} 
+0

당신은 2 개의 에러를 얻습니다. 1067 : Array 타입의 값을 관련없는 타입의 flash.display : DisplayObject로 암시 적으로 강제 변환합니다. & 1114 : 공용 속성은 패키지 내에서만 사용할 수 있습니다. 감사합니다. – Tieme