Я пытаюсь выяснить, как Vectors работают с классами. Ну, у меня есть это в моих свойствах:AS3 - Создание классов внутри векторов
private var rockets:Vector.<Rocket> = new Vector.<Rocket>();
private var rocket:Rocket;
Rocket класс просто нормальный MovieClip класса со встроенным изображением внутри.
Теперь у меня есть этот код:
if (_pressingSpace)
{
rocket = new Rocket();
rocket.x = Random;
addChild(rocket);
rockets.push(rocket);
}
При нажатии пространства ракеты создаются при случайном х, создании экземпляра класса Rocket и сохраняет его в ракету вара. AddChild отобразит изображение. Ну, когда вы снова нажимаете пробел, я понимаю, что все это происходит снова, но заменяет данные, которые были внутри ракеты var, с текущими данными (у которых есть новый случайный x). Ну, эта линия сохраняет каждую ракету класса Vector:
rockets.push(rocket);
Теперь вот что я нашел в моем тестировании: Я создал несколько ракет с пространством, затем прессуют х, чтобы показать мне иксы
if (_pressingX)
{
trace(rockets[0].x);
trace(rockets[1].x);
trace(rockets[2].x);
trace(rockets);
trace(rocket);
}
И я получил все случайные х, включая все ракеты, которые были внутри вектора. Ну вот что я не получаю: если каждый раз я нажимаю пробел, я заменяю данные ракеты var текущим, почему я все еще могу получить к нему доступ через «ракеты»? Разве это не исчезло с этим? Что именно он делает, мне нужно знать для моей дальнейшей работы. btw, когда я делаю
trace(rocket.x);
Все, что я вижу, это новейшая ракета, которую я создал, а не другие.
Каждый раз, когда вы делаете 'новый Rocket()' создать дополнительное пространство в памяти для этого объекта, со своим собственным адресом и т.д. Вместо того, чтобы поместить переменную в Array/Vector вы помещаете в него свою общую информацию (по которой адрес в ОЗУ может найти объект). Если бы вы не поместили эти созданные Ракеты в массив, они бы были собраны мусором через некоторое время, потому что они больше не используются. – DodgerThud
Так почему я не могу проследить их все с помощью простой трассы (ракеты); Я попробовал трассировать (ракета [1]); и это тоже не сработало. ? Кроме того, как именно выглядит эта информация, например: координаты, случайное имя для дифференциации и т. Д.? – RunningFromShia
Потому что вы переопределяете переменную. 'private var rocket' - это просто местозаполнитель, который сообщает компилятору« когда вы создаете объект этого класса, освобождайте пространство в ОЗУ для хранения информации этого объекта ». Информация об объекте - это переменные и функции в нем. Таким образом, класс, который имеет переменную 'public var index: int', сохранит 4 байта в ОЗУ (поскольку целые числа равны 4 байтам в AS3). Вектор/массив - это одно и то же, но вместо этого он может указывать на несколько объектов, а не только на один. – DodgerThud