![]() |
возможно ли удаление объекта со stage из другого класса
в основном классе приложения есть объект (экземпляр класса FloatingCont):
Код AS3:
Код AS3:
получается, что stage.addChild(_ someObject) - работает, stage.removeChildAt(i) - работает, а можно ли как-нибудь сделать stage.removeChild(_someObject) из другого класса? |
В другом классе нет ссылки на _floatingCont, соответственно и удалять нечего.
И вообще метод contains вернет true, даже если фактически объект не содержится в самом контейнере, а содержится в каком-то из его дочерних. У contains есть второй параметрб который как раз отключает рекурсивную проверку. Но вообще лучше не использовать contains, а использовать Код AS3:
И еще одно. Не надо путать stage и документ класс. Вначале в Main написано addChild(_floatingCont); Это совсем не означает, что объект добавился на stage. Код AS3:
Код AS3:
Код AS3:
Код AS3:
|
Цитата:
если я не могу удалять из класса объект, который находится в Main или в Stage, то как мне тогда менять содержимое на stage или в Main? диспатчить события в Main и там ставить слушатели и выполнять нужные действия? нельзя как-нибудь "расшарить" объекты в Main, для другого класса? :) |
Цитата:
Цитата:
Говорю по опыту, лучше слать события) И вообще, тут уже много раз поднимались темы MVC, да и вообще нагуглить это очень просто. Так вот - это очень важная штука. Ее тоже нужно по возможности изучить как можно быстрее |
Ну, MVC не MVC, но без хотя бы общего понимания ООП в AS3 будет крайне неуютно — ночь темна и полна ужаса, потому что AS3 построен на концепции ООП и старается поддерживать ее всеми силами, даже костылями. И пока основные понятия ООП для Вас темный лес, будет совершенно непонятно, как и, главное, почему все устроено именно так. Но начинать с ООП не получится, увы. Сначала надо какую-то синтаксическую базу освоить.
В двух словах по этой ситуации: если объект А создал объект В, то ссылка на объект В известна только ему одному. Важно понять, что НЕТ никакого общего реестра всех объектов, в который можно обратиться из любого места к любому объекту. Чтобы другие объекты могли получить эту ссылку, соответствующая переменная в объекте А должна "быть расшареной", на языке программистов — иметь модификатор доступа public. Модификаторы доступа определяют область видимости переменной. А если еще точнее — свойства. Свойствами называются переменные, объявленные в теле класса (переменные могут также объявляться в теле функций, и тогда доступ к ним возможен только в теле функции — такие переменные называются локальными и свойствами "всего" экземпляра не являются). Если переменная объявлена в теле класса, она доступна как минимум во всем коде класса, то есть во всех его функциях (методах). Даже если Вы не укажете модификатор явно, он будет назначен автоматически (по-умолчанию internal — доступен всем членам пакета). Модификатор public делает свойство доступным всем [у кого есть ссылка на экземпляр], а модификатор private закрывает доступ к свойству для всех других объектов, делая свойство "внутренним" для самого экземпляра (опустим тонкости и подробности). Итак, в данной ситуации Вам нужно объявить не private, а Код AS3:
и далее обращаться к ней, как к свойству(!) объекта-хозяина, то есть мейна, который для всех детей доступен по ссылке root: Код AS3:
|
Мне кажется, у автора до сих пор проблемы с пониманием концепции дисплей листа...
Wolsh, скиньте ему то, что вы когда-то скидывали, дерево дисплей листа, вроде, чтобы он наглядно увидел, как оно всё на самом деле устроено, и расскажите про матрицы, ColorTransform, как они влияют на контейнер, фильтры и другие свойства DO. |
Цитата:
например мне нужно удалить DOC, находящийся в Stage, например в Stage у него имя _floatingCont, мне нужно в классе (из которого я хочу удалить _floatingCont, находящийся в Stage) писать dispatchEvent("deleteFloatingCont"), а в stage регистрировать слушатель, который будет принимать событие "deleteFloatingCont" и только тогда удалять этот _floatingCont? но опять же, мне нужно, например, проверять содержит ли Stage этот _floatingCont, и если содержит, то удалять прошлый экземпляр (removeChild) и потом создавать новый экземпляр _floatingCont... как тогда проверить из другого класса, содержит ли Stage объект _floatingCont, если у класса нет доступа к такой "проверке" :\\ Wolsh, прочитал Ваш ответ, буду пробовать так, как Вы написали, пока не пойму как делать правильно... :\\ Добавлено через 25 минут СaseyRyan, что такое MVC не знаю, в книжке Мука про это ещё не было ничего, нагуглю обязательно... спасибо за ответы! |
|
Код AS3:
Код AS1/AS2:
Цитата:
|
как один из вариантов передачи ссылки
Код AS3:
Код AS3:
можно ещё set/get, можно через наследование и т.д. Добавлено через 3 минуты хотя стоит ещё добавить слушателя сцены, а то мож ошибки посыпать Добавлено через 5 минут код нге проверял, мож чё не так, но смысл надеюсь понятен |
| Часовой пояс GMT +4, время: 22:41. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.