Динамические имена экземпляров AS 3.0 - PullRequest
1 голос
/ 18 апреля 2011

Привет, я создал собственный класс, в котором я хотел бы создать x экземпляров мувиклипа.Но следующее не работает:

package {</p> <pre><code>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, Слой «Слой 1», Кадр 1, Строка 5 1119: Доступ к возможно неопределенному свойству Collector через ссылку со статическим типом CustomClass.

Ответы [ 3 ]

2 голосов
/ 18 апреля 2011

Во-первых, вам нужно объявить Collector как открытый:

public var Collector:Array = new Array(); 

Ваш Collector - это массив, а не экранный объект, и поэтому его нельзя добавить в дерево отображения.Вместо этого вы должны поместить каждый newMovieClip на экран класса Custom и расположить их внутри цикла for.Тогда вам вообще не нужен коллектор, потому что вы можете нацелить видеоклипы, используя getChildAt():

trace(customClass_mc.getChildAt(5).x);
1 голос
/ 21 июня 2011

Я сам нашел другой ответ, который, я думаю, еще лучше!

Тебе контейнер вообще не нужен.

при использовании следующего

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);
0 голосов
/ 18 апреля 2011

Переменная 'Collector' доступна только внутри конструктора так, как у вас есть.Коллекционер должен быть обнародован, чтобы быть доступным вне графика времени.Лучше всего сделать публичный метод получения доступа к нему.Так что-то вроде:

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