1

嗨,我创建了一个自定义类,我想在其中创建一个影片剪辑的 x 个实例。但以下不起作用:

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);

//尝试跟踪其中一个实例的 x 位置。
跟踪(customClass_mc.Collector[5].x);

我不断收到错误消息:场景 1,图层“图层 1”,第 1 帧,第 5 行 1119:通过静态类型 CustomClass 的引用访问可能未定义的属性收集器。

4

3 回答 3

2

首先,您需要将 Collector 声明为 public:

public var Collector:Array = new Array(); 

您的 Collector 是一个数组,而不是显示对象,因此无法将其添加到显示树中。相反,您会将每个 newMovieClip 推送到 Custom 类的显示上,并将它们放置在您的 for 循环中。然后您根本不需要收集器,因为您可以使用以下方式定位影片剪辑getChildAt()

trace(customClass_mc.getChildAt(5).x);
于 2011-04-18T12:19:43.420 回答
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);
于 2011-06-21T09:32:00.610 回答
0

变量 'Collector' 仅在构造函数中以您拥有的方式可用。收集器必须公开才能从时间线之外访问。最好的办法是创建一个公共的 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);
    }
}
于 2011-04-18T12:22:12.737 回答