![]() |
|
||||||||||
|
|||||
|
Привет!Делаю выпадающий список и столкнулся с одной проблемкой! При отведении курсора от пункта меню подпункты должны исчезать...т.к. я всё делаю через xml у меня за создание всех подпунктов в каждом пункте отвечает одна и та же функция! Следовательно для того чтобы обновить кол-во текстовых полей и содержимое в них я повторно запускаю функцию создания полей и их заполнения через xml! Получается чтобы при этом не происходило наслоения старых пунктов на новые я должен каким то образом удалять старые пункты перед тем как создавать новые! Описываю структуру своих ссылок:
1. Есть мувик на сцене, в который будут помещаться ссылки(пока внутри тока фон) 2. Создаю программно спрайт в этом мувике в который и буду помещать мувики с текстом ссылок!(чтобы они все были в отдельном контейнере) 3. В созданный ранее контейнер помещаю ссылки при помощи for'a. ну и т.д. Получается чтобы очищать сцену от ранее созданных подпунктов я просто удаляю мувик контейнер(который я создавал на пункте 2). Он то вроде и удаляется, но почему-то кол-во мувиков в нём всёравно увеличивается! Подскажите, как правильно очищать подпункты со сцены и правлен ли вообще алгоритм создания в моём случае?Спасибо! Прикрепляю весь код(он в некоторых местах не доделан - это касается загрузки самого xml в текстовые поля в цикле, но на суть вопроса и как я понимаю ответа это повлиять не должно) var xml:XML; var mainLink_txt:TextField; var subLinks_txt:TextField; var mainLink_mc:Sprite; var subLink_mc:Sprite; var subLinkContainer_mc:Sprite = new Sprite(); var xmlLoader:URLLoader = new URLLoader(); xmlLoader.load(new URLRequest("../xml/headerLinks.xml")); xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded); function xmlLoaded(e:Event):void { //trace(e.target.data); xml = XML(e.target.data); //trace(xml.top); placeMainLinks("top"); placeMainLinks("bottom"); } function clearSubLinks():void { trace(subLinkContainer_mc.name); upSubLinks.removeChild(subLinkContainer_mc); } subLinkContainer_mc.x = 100; var myFormat:TextFormat = new TextFormat(); myFormat.font = "Verdana"; myFormat.size = 12; myFormat.color = 0x000000; myFormat.italic = false; myFormat.bold = true; myFormat.align = TextFormatAlign.JUSTIFY; upSubLinks.visible = false; downSubLinks.visible = false; function placeMainLinks(level:String):void { var xmlLevel:XMLList; var linkHolder:MovieClip; if(level == "top") { xmlLevel = xml.topLinks.link; linkHolder = upMainLinks; //trace(xmlLevel.length()) } else if(level == "bottom") { xmlLevel = xml.bottomLinks.link; linkHolder = downMainLinks; } for(var i:uint; i< xmlLevel.length(); i++) { mainLink_txt = new TextField(); mainLink_mc = new Sprite(); mainLink_txt.text = "works"; mainLink_txt.setTextFormat(myFormat); mainLink_txt.selectable = false; mainLink_txt.autoSize = TextFieldAutoSize.LEFT; mainLink_txt.antiAliasType = flash.text.AntiAliasType.NORMAL; mainLink_txt.embedFonts = true; mainLink_txt.border = true; mainLink_mc.buttonMode = true; mainLink_mc.addChild(mainLink_txt); linkHolder.addChild(mainLink_mc); mainLink_mc.x = i * 50; mainLink_mc.addEventListener(MouseEvent.ROLL_OVER, rollMainLink); } } function placeSubLinks(level:String):void { var xmlLevel:XMLList; var linkHolder:MovieClip; if(level == "top") { xmlLevel = xml.bottomLinks.link; linkHolder = upSubLinks; //trace(xmlLevel.length()) } else if(level == "bottom") { xmlLevel = xml.bottomLinks.link; linkHolder = downSubLinks; } for(var i:uint; i< xmlLevel.length(); i++) { subLinks_txt = new TextField(); subLink_mc = new Sprite(); subLinks_txt.text = "works"; subLinks_txt.setTextFormat(myFormat); subLinks_txt.selectable = false; subLinks_txt.autoSize = TextFieldAutoSize.LEFT; subLinks_txt.antiAliasType = flash.text.AntiAliasType.NORMAL; subLinks_txt.embedFonts = true; subLinks_txt.border = true; subLink_mc.buttonMode = true; subLink_mc.addChild(subLinks_txt); subLink_mc.name = "subLink" + i; subLinkContainer_mc.addChild(subLink_mc); subLinkContainer_mc.name = "linksContainer"; linkHolder.addChild(subLinkContainer_mc); if(i%2 == 0) { subLink_mc.y = 0; subLink_mc.x = i * 25; } else { subLink_mc.y = 15; subLink_mc.x = (i-1) * 25; } } } function rollMainLink(e:MouseEvent):void { if(e.target.parent.name == "upMainLinks") { upSubLinks.visible = true; placeSubLinks("top"); } else if(e.target.parent.name == "downMainLinks") { downSubLinks.visible = true; placeSubLinks("bottom"); } subLinkContainer_mc.x = e.target.x; e.target.addEventListener(MouseEvent.ROLL_OUT, rollOutMainLink); } function rollOutMainLink(e:MouseEvent):void { if(e.target.parent.name == "upMainLinks") { //upSubLinks.visible = false; trace(subLinkContainer_mc.numChildren); clearSubLinks(); } else if(e.target.parent.name == "downMainLinks") { downSubLinks.visible = false; } } |
|
|||||
|
ветеран форума
|
Цитата:
Похоже что Вы удаляете subLinkContainer_mc просто со сцены, но не очищаете его содержимое, а т.к создается он у Вас один раз, то следственно постоянно накапливает в себе то что Вы в него добавляете при каждом открытии меню. Т.е. либо удаляйте и создавайте subLinkContainer_mc каждый раз при необходимости, либо очищайте его содержимое. P.S. А еще проще прятать/показывать этот контейнер в зависимости от поведения мыши и не перестраивать постоянно элементы списка. Но это при условии что пункты меню неизменны.
__________________
trace("Остановите Землю, я сойду!!!"); Последний раз редактировалось Mur4ik; 18.06.2010 в 05:38. |
|
|||||
|
в том то и дело, что у меня 5 пунктов, со своими подпунктами и содержимое в подпунктах, а также их кол-во меняется в зависимости от того на какой пункт я навожу мышь!Так что просто менять висибл врядли получится!
А как subLinkContainer_mc удалить физически вместе со всеми его доченими элементами? |
|
|||||
|
ветеран форума
|
Можно просто очищать его содержимое
Ну и если в subLinkContainer_mc содержатся элементы к которым привязаны слушатели, то тоже не забываем их очищать.
__________________
trace("Остановите Землю, я сойду!!!"); Последний раз редактировалось Mur4ik; 19.06.2010 в 14:16. |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:00. |
|
|
« Предыдущая тема | Следующая тема » |
|
|