|
|
|||||
Регистрация: Dec 2012
Сообщений: 6
|
Объекты и "дети"
День добрый,
Господа объясните в чем различие между: и а также как правильно удалить созданный объект в обоих случаях? |
|
|||||
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
|
Тем, что во втором случае создается временная ссылка на объект, что позволит с объектом что-то сделать, например задать другие координаты, или сменить уровень прозрачности.
Удалить в первом случаи объект может быть проблематично, так как не известно, он один там или несколько. Если один, то просто Если несколько и удалить нужно конкретный объект, то не имея на него ссылки, индекса глубины или имени, не получится. Поэтому, используя второй вариант, можно сохранить ссылку на объект (например в переменной класса, а не в локальной как сейчас, или в массиве) и потом по ней удалить. |
|
|||||
Регистрация: Dec 2012
Сообщений: 6
|
Спасибо за ответ.
Просто пытаюсь написать "менеджер объектов" и хочется сделать это красиво. т.е. строкой мы всего лишь указываем что smb будет хранить ссылку на объект, а не сам объект. возможно ли создать объект который не будет иметь на себя ссылки и не быть чьим либо потомком? я так понимаю возможно: тогда как потом его удалить? и далее: попробовал контролировать объекты в сцене следующим образом, создал класс Global.as и создал в нем массив Unit: package { public class Global { public static var Unit:Object = []; public function Global() { // constructor code } } } package { import flash.display.MovieClip; import Global; public class main extends MovieClip { public function main() { // constructor code Global.Unit[0] = new Symbol1(); Global.Unit[1] = new Symbol1(); Global.Unit[2] = new Symbol1(); //первый trace(Global.Unit[0].numChildren, Global.Unit[2].numChildren); //1 1 this.addChild(Global.Unit[0]); Global.Unit[0].addChild(Global.Unit[1]); //второй trace(Global.Unit[0].numChildren, Global.Unit[2].numChildren); //2 1 this.addChild(Global.Unit[2]); Global.Unit[2].addChild(Global.Unit[1]); //третий trace(Global.Unit[0].numChildren, Global.Unit[2].numChildren); // 1 2 Global.Unit[1].parent.removeChild(Global.Unit[1]); Global.Unit.splice(1,1); } } } первый trace возвращает "1 1"? кто эти дети? второй и третий trace меня порадовали - т.е. родитель знает сколько у него детей даже если вдруг его ребенку назначить другого родителя он это отследит. Всегда так, или возможны исключения? Правильно ли удалять ребенка (из любого места и даже другого класса если ему (другому классу) также импортировать Global) следующим образом: Global.Unit[1].parent.removeChild(Global.Unit[1]); //удаляем объект Global.Unit.splice(1,1); //удаляем ссылку на него или есть более элегантный метод удаления объектов? |
|
|||||
Цитата:
Цитата:
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Ребёнок просит родителя его удалить, а родитель уже решает, удалять его, или не удалять. Ребёнку, в целом, глубоко пофигу где лежать.
Просить родителя хорошо событием. EventDispatcher#dispatchEvent. Ещё рекоммендую пользоватья ссылками на полную катушку. Например, вместо вот так или ещё лучше
__________________
Тут мужик танцует и поёт про флэш |
Часовой пояс GMT +4, время: 12:16. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|