Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Повторный вызов addChild (http://www.flasher.ru/forum/showthread.php?t=215800)

Appleman 21.07.2021 02:27

Повторный вызов addChild
 
Друзья, у меня опять затык со списком отображения, и опять далеко за пределами моего понимания.

Имею шкалу, на которую нанесены маркеры, помечающие некие важные уровни свойства, которое отображает шкала. Сам маркер - это оболочка для Bitmap-иконки, которая дополнительно хранит некоторую информацию для более комфортного управления. Помимо прочего, данный класс умеет показывать или скрывать иконку. Например, если уровень по каким-то причинам "уехал" за пределы шкалы, то маркер нужно убрать. И наоборот. За эти операции отвечают методы hideIcon() и showIcon(). Оба простые как грабли, ломаться там нечему в принципе. Вот код:

Код AS3:

                // ******* CONSTRUSTOR 
 
                public function BarMarker (icon: BitmapIcon)
                {
                        _icon = icon;
                }
 
 
                // ******* INTERNAL METHODS
 
                internal function showIcon () : void
                {
                        if (_icon.parent == this) return;
                        this.addChild (_icon)
                }
 
                internal function hideIcon () : void
                {
                        if (_icon.parent != this) return;
                        this.removeChild (_icon);
                }

На практике происходит следующее. При первом выполнении метода showIcon() маркер корректно появляется на шкале. Но если из объекта-родителя вызвать метод hideIcon(), а затем повторно showIcon(), иконка не отображается. Но даже не это главное! При повторном вызове у меня вообще пропадает с экрана половина элементов. Причём последние - достаточно крупные объекты на несколько ступеней выше по иерархии. И никаким образом не связаны с классом BarMarker - некоторые даже ссылки на него не имеют!

Как такое в принципе возможно?! Я в тупике :( Даже не понимаю, куда копать. Буду признателен за любую помощь.

Wolsh 23.07.2021 17:24

Попробуй потрейсить координаты и размеры того что "пропадает" и их контейнеров. Может, ты убираешь шкалу, а она продолжает расти или уползать, только без отображения, и в тот момент, когда ты снова ее аттачишь в дисплейЛист, она уже неведомо где — и при этом растянула контейнер так, что другие его детки тоже улетают за пределы экрана.

Appleman 23.07.2021 18:33

Я не дождался никаких советов и сам не нашёл ничего путного. В итоге записал на свой счёт первое интеллектуальное поражение (до сего момента удавалось находить причины непонятного мне поведения программы) и с болью в сердце переписал этот кусок кода, подняв функционал отображения и скрытия маркеров на уровень выше - самой шкале, типа addChild (barMarker).

В любом случае спасибо за ответ. Если ещё что-то подобное возникнет, воспользуюсь. Как минимум, это первое разумное объяснение, действительно похоже на правду. Я обратил внимание, что исчезают только объекты, расположенные ниже злосчастной иконки по глубине.


Часовой пояс GMT +4, время: 15:44.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.