Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как удалить экземпляры класса? (http://www.flasher.ru/forum/showthread.php?t=141173)

cdc7600 17.06.2010 19:13

Как удалить экземпляры класса?
 
Здравствуйте, возник вопрос,
создаю экземпляры класса из XML и добавляю на сцену, а как их удалить все? или хотя бы сделать невидимыми
Код AS3:

var loader:URLLoader = URLLoader(event.target);
externalXML = new XML(loader.data);
 
XMLlist = externalXML.children();
for (var i:Number = 0; i < XMLlist.length(); i++) {
        item = new Item( externalXML.country[i].image,  externalXML.country[i].url, externalXML.country[i].countryname );
        addChild(item);
        item.x = externalXML.country[i].x;
        item.y = externalXML.country[i].y;
}


Хемуль 17.06.2010 19:24

2 cdc7600:
Почитайте про метод
DisplayObjectContainer.removeChild().

Удалить все:
Код AS3:

while (container.numChildren > 0)
{
        container.removeChildAt(0);
}

Скрыть те, которые являются экземплярами класса Item (записал растянуто):
Код AS3:

for (var i:uint = 0; i < container.numChildren; i++)
{
        var child:DisplayObject = container.getChildAt(i);
        if (child is Item)
        {
                var item:Item = child as Item;
                item.visible = false;
        }
}


cdc7600 17.06.2010 20:15

теперь происходит ошибка при вызове этого метода :(
Код AS3:

XMLlist = externalXML.children();
                                for (var i:Number = 0; i < XMLlist.length(); i++) {
                                        item = new Item( externalXML.country[i].image,  externalXML.country[i].url, externalXML.country[i].countryname );
                                        container.addChild(item);
                                        container.item.x = externalXML.country[i].x;
                                        container.item.y = externalXML.country[i].y;
                                }


Хемуль 17.06.2010 20:33

2 cdc7600:
- Какая ошибка именно?
- При вызове какого метода именно?

cdc7600 17.06.2010 20:38

разобралась, ошибка была иза-за этого:
Код AS3:

container.item.x = externalXML.country[i].x;
container.item.y = externalXML.country[i].y;

оказывается надо писать
Код AS3:

item.x = externalXML.country[i].x;
item.y = externalXML.country[i].y;

не знаю почему))

спасибо за помощь, что-то я затупила запихать всё в контейнер)

Хемуль 17.06.2010 20:43

2 cdc7600:
Цитата:

не знаю почему))
Потому что item - это переменная с ссылкой на экземпляр класса Item, но не свойство класса, экземпляром которого является container.

artem.qznetsov 10.03.2011 15:49

у меня похожая проблема
загружаю данные из XML по разным мувиклипам и добавляю на сцену. по нажатию на кнопку нужно удалить их все.пробовал по вашему методу и удаляется только последний элемент. я новичок в работе с XML, так что не судите строго.)

Код AS1/AS2:

var xmlPath:String = "news.xml";
var settingsXML:XML;
 
var loader = new URLLoader();
loader.load(new URLRequest(xmlPath));
loader.addEventListener(Event.COMPLETE, xmlLoaded);
 
function xmlLoaded(e:Event):void
{
        if ((e.target as URLLoader) != null )
        {
                settingsXML = new XML(loader.data);
                settingsXML.ignoreWhitespace = true;
                createMenu();
        }
 
}
 
function createMenu():void
{
        var newsTitle:NewsTitle;
        var newsDate:NewsDate;
        var btn:Button;
        var i:uint = 0;
 
        for each (var page:XML in settingsXML.pages.page)
        {
                var container:Sprite = new Sprite();
                addChild(container);
                newsTitle = new NewsTitle();
                newsDate = new NewsDate();
                btn = new Button();
 
                newsTitle.newsLabel.text = page.title;
                newsTitle.newsLabel.autoSize = TextFieldAutoSize.LEFT;
 
                newsDate.newsDateLabel.text = page.date;
                newsDate.newsDateLabel.autoSize = TextFieldAutoSize.LEFT;
 
                newsTitle.x = 150;
                newsTitle.y = 50 + i * 40;
 
                newsDate.x = 50;
                newsDate.y = 50 + i * 40;
 
                btn.x = 150;
                btn.y = 50 + i * 40;
                btn.width = newsTitle.width;
                btn.height = newsTitle.height;
                btn.alpha = 0;
                btn.buttonMode = true;
 
                container.addChild(newsTitle);
                container.addChild(newsDate);
                container.addChild(btn);
 
                trace(container.numChildren);
 
                btn.addEventListener(MouseEvent.CLICK, btn_click);
                function btn_click(e:MouseEvent)
                {
                        while (container.numChildren > 0)
                        {
                                container.removeChildAt(0);
                        }
                        trace(container.numChildren)
                }
 
                i++;
        }
}

трэйс показывает, что у меня 3 экземпляра, но в реальности из ХМЛ их создается 9, по три разных классов и удалить мне нужно их все. я явно что-то недопонимаю

in4core 10.03.2011 17:07

Не пишите функции в функциях это дурной тон - который часто влечет за собой ошибки!.

artem.qznetsov 10.03.2011 18:40

спасибо, это помогло, удалились.
но есть еще один вопрос, правда он не совсем по этой теме.
помимо удаления объектов, необходимо чтобы появлялся новый объект с текстом также из XML.
вопрос в том, как узнать на какой именно объект класса Button я нажал. и как отобразить нужный кусок текста (content) из хмл:
PHP код:

<?xml version="1.0" encoding="utf-8"?>

<site>
  
    <pages>
 
        <page page_number="1">
            <title>Lorem ipsum dolor sit amet</title>
            <date>3 дек</date>    
           <content>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur et luctus ligula. Cras quis nisl nec ligula volutpat sodales vel sit amet lorem. Donec orci dolor, pretium nec venenatis a, ullamcorper sed nulla. Ut congue enim vitae ligula pharetra sit amet malesuada massa scelerisque. </content>        
        </page>
 
        <page page_number="2">
            <title>Lorem ipsum dolor sit amet</title>
            <date>25 окт</date>
           <content>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur et luctus ligula. Cras quis nisl nec ligula volutpat sodales vel sit amet lorem. Donec orci dolor, pretium nec venenatis a, ullamcorper sed nulla. Ut congue enim vitae ligula pharetra sit amet malesuada massa scelerisque. </content>
        </page>
</site>

as-код я приводил выше.

спасибо


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

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