Форум 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=131462)

Musatoff 21.10.2009 12:28

Перезагрузит флешку оставив данные
 
Добрый день, друзья!
Вопрос такой. Есть мувик, в который грузятся картинки и добавляются другие клипы по нажатию одной кнопки. Как сделать так чтобы при нажатии на другую кнопку в этот же мувик чистился и туда загружались новые картинки и клипы.
я сделал так:
Код AS3:

var myTARGET:Object = event.target.parent.parent.parent.getChildByName('line')
                                if(!myTARGET){
                                        line = new Line()
                                        event.target.parent.parent.parent.addChild(line)
                                        line.name = 'line'
                                        line.maska.mouseEnabled = false
                                        line.blendMode = BlendMode.LAYER;
                                        line.x = 50
                                        line.y = 250
                                        getThumbs2(event)
                                }
                                else{
                                        for(var f:int = 0; f < myTARGET.numChildren(); f++) {
                                        myTARGET.removeChildAt( f )
                                        getThumbs2(event)
                                }

Впринципе работает, НО! если делаешь симуляцию загрузки то часто новые клипы не грузяться или наполовину видны.

random13 21.10.2009 12:48

значит что то делаете не так, в чем проблема бирете и чистите весь ваш мувик что вы ровно и сделали, единственное возможно проблема с логикой

Musatoff 21.10.2009 14:10

а может есть такой листенер, что например отследит, что мувик пустой? потому что подозреваю что внутри не все удаляется.

random13 21.10.2009 14:24

Код AS3:

for(var f:int = 0; f < myTARGET.numChildren(); f++) {
                                        myTARGET.removeChildAt( f )
                                        getThumbs2(event)

таким способом вобщем то все достаточно не плохо зачищается
в конце концов сделайте трейс в любой момент где посмотрите сколько у вашего объекта детей

cleptoman 21.10.2009 15:58

пустой мувик - новый мувик )

ToRR 21.10.2009 17:11

ваш код:
Код AS3:

else{
for(var f:int = 0; f < myTARGET.numChildren(); f++) {
myTARGET.removeChildAt( f )
getThumbs2(event)
}

где еще одна фигурная скобка? вам точно нужно вызывать getThumbs2(event) при каждой итерации цикла? ну и удалять дочерние объекты из контейнера черз for.... кхм.... может быть как-то так:
Код AS3:

while (myTARGET.numChildren)
{
    myTARGET.removeChildAt(0);
}
getThumbs2(event);

?

elfon 21.10.2009 17:11

Я туплю или этого никто не замечает но:
Код AS3:

for(var f:int = 0; f < myTARGET.numChildren(); f++) {
                                        myTARGET.removeChildAt( f )
                                        getThumbs2(event)

не удаляет всех потомков. Как раз таки проблема в логике.

Musatoff 21.10.2009 17:42

почему не удаляет? Как раз удаляет, но он не успевает видимо удалить до тех пор пока не создаст новый. Нужно как отследить когда мувик уже пустой.
2cleptoman: пробывал, так плохо получается, что-то не работает

Felicast 21.10.2009 17:45

Код AS3:

while(myTARGET.numChildren())
{
        myTARGET.removeChildAt(0);
}

удалит все

Musatoff 21.10.2009 17:53

удалить, нет проблем уже, но как отследить что все удалено? какой листенер сделать, что-то не вкуриваю?

random13 21.10.2009 17:55

Цитата:

Сообщение от Felicast (Сообщение 859499)
Код AS3:

while(myTARGET.numChildren())
{
        myTARGET.removeChildAt(0);
}

удалит все

да этот вариант самый лучший, сам пишу именно так обычно счас уже мозг закипел и забыл про удоство

Felicast 21.10.2009 18:01

Код AS3:

while(myTARGET.numChildren())
{
        myTARGET.removeChildAt(0);
}
dispatcheEvent(new Event("yourSuperMegaEvent"));

а там где надо вешайте листенер
в чем проблема-то?

Musatoff 21.10.2009 18:24

2Felicast. Вопрос, а dispatcheEvent, что дает в этом случае? Извините, если вопрос тупой.

Ravanger 21.10.2009 18:30

рассылает событие, то, что собственно вам и нужно. затем

Код AS3:

addEventListener("yourSuperMegaEvent", mySuperMegaHandler);


Musatoff 21.10.2009 18:47

Это я перевел, но что значит рассылает?

Ravanger 21.10.2009 18:56

Это значит, что все объекты которые подписаны на это событие получают уведомление о его возникновении

Musatoff 21.10.2009 23:12

Спасибо господа, все получилось! Все нормально перегружается и загружается. Но теперь следующий вопрос, кликая много раз то на одну кнопку то на другую, объем памяти пополняется и пополняется ровно на объем загруженого ранее но уже удаленного. не подскажите что делать? Я так понимаю что все остается в памяти, но как это удалить... хз

elfon 21.10.2009 23:55

1. Стандарт: проверь не сохраняются ли где-нибудь ссылки на объекты.
2. Подожди немного, может просто сразу CG не успевает сделать всю свою работу.

ToRR 22.10.2009 10:41

сделать кнопку, в обработчике клика написать, например, вот это:
Код AS3:

trace(Number(System.totalMemory / 1024 / 1024).toFixed(3));
System.gc();
System.gc();
trace(Number(System.totalMemory / 1024 / 1024).toFixed(3));

после этого увидеть, что числа примерно равны, отписать удаляемые объекты от всех листнеров перед удалением, поискать места, где ссылки на удаленные объекты могут остаться и дочистить там.

Musatoff 23.10.2009 15:55

Я решил проблему, точнее она сама решилась таинственным образом!!! Я просто перекомпилировал в cs4 и все встало на свои места, никто мне не скажет почему???


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

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