Форум программистов, компьютерный форум, киберфорум
Наши страницы
ActionScript
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Serega931
1 / 1 / 0
Регистрация: 19.08.2013
Сообщений: 46
1

Циклом for создаем Loader - его удаление?

29.08.2013, 00:19. Просмотров 842. Ответов 8
Метки нет (Все метки)

Всем здравствуйте Помогите пожалуйста разобраться с циклом.
Объясняю: создаем XML, через цикл for берем из XML адреса картинок и выставляем их в горизонтальный столбец
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import flash.display.Loader;
import flash.net.URLRequest;
 
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, Loaded);
urlLoader.load(new URLRequest("xml/images.xml"));
 
var xml:XML;
var xmlList:XMLList;
 
function Loaded(e:Event):void
{
    xml = XML(urlLoader.data);
    xmlList = xml.image;
 
    imagesLoaded();
}
 
function imagesLoaded():void 
{
    var obheekolli4:Number = xmlList.length();   // длинна массива
    var counter:Number = 0;  // счетчик, перебирает массив
    
    for (var m:int = 0; m < obheekolli4; m++)
    {
        var Kartinka:Loader = new Loader();
        Kartinka.y = (Kartinka.height+50)*m;
        Kartinka.load(new URLRequest(xmlList[counter].cena));  // cena    это в XML тег такой
        addChild(Kartinka);
        counter++;
 
    } 
}
Код работает все хорошо.

Вопрос: есть кнопка, как при нажатии на кнопку удалить ВСЕ эти картинки???
Насколько я знаю removeChild(Kartinka) удаляет из списка отображения, но не удаляет из памяти, Kartinka = null удаляет полностью. Логически рассуждая каждый цикл создает новую переменную - а с каким названием и где ее искать, логически рассуждая искать в списке отображения и от туда удалять. В общем как только я не пытался их удалять ничего не получается. Повторяю вопрос как их удалить ВСЕ сразу при нажатии на кнопку??? Заранее спасибо с уважением Сергей
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2013, 00:19
Ответы с готовыми решениями:

Создаем объект cow, у которого есть метод message, который принимает аргументом text и возвращает его
Создаем объект cow, у которого есть метод message, который принимает аргументом text и возвращает...

Удаление циклом дублирующихся символов
В общем: public string Editencriptkey(string _encriptkey) { ...

Удаление items компонента slistbox циклом for
Доброго времени суток, возникла вот такая проблема: procedure TForm6.sButton3Click(Sender:...

Получение данных из файла ассинхронным запросом, при его наполнении циклом
Здравствуйте. Есть цикл, который делает операции и ложит текст в файл таким методом: public...

С циклом «пока» или циклом «до» написать программу вычисления суммы S квадратов чисел от 1 до N
В общем тут сделано, что высчитывает только четные числа,а надо чтобы все числа считал, помогите...

8
TanaTiX
Модератор
2800 / 1656 / 169
Регистрация: 19.02.2011
Сообщений: 6,023
Завершенные тесты: 2
29.08.2013, 12:48 2
Serega931, нужно сохранить ссылки на все загрузчики (например, поместить их в массив, желательно типизированный)
0
Serega931
1 / 1 / 0
Регистрация: 19.08.2013
Сообщений: 46
29.08.2013, 18:08  [ТС] 3
Вроде сделал
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import flash.display.Loader;
import flash.net.URLRequest;
 
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, Loaded);
urlLoader.load(new URLRequest("xml/images.xml"));
 
 
var arry:Array = [];// пустой массив, в него будем сохранять ссылки
var obheekolli4_2:Number; // вторая переменная, вытаскивает длинну массива --- число из локального в глобальный
 
 
var xml:XML;
var xmlList:XMLList;
 
function Loaded(e:Event):void
{
    xml = XML(urlLoader.data);
    xmlList = xml.image;
 
    imagesLoaded();
}
 
function imagesLoaded():void
{
    var obheekolli4:Number = xmlList.length();// длинна массива XML
    var counter:Number = 0;// счетчик, перебирает массив
    obheekolli4_2 = obheekolli4; // присваиваем локальное длинну массива --- число в глобальное
    
    for (var m:int = 0; m < obheekolli4; m++)
    {
        arry[arry.length] = xmlList[counter].cena;
 
        var Kartinka:Loader = new Loader();
        Kartinka.y = (Kartinka.height+50)*m;  // выстраиваем картинки в вертикальный столбец
        Kartinka.load(new URLRequest(arry[counter]));  // адрес берем из массива
 
        addChild(Kartinka);
        counter++;
    }
    mass_Knopka.addEventListener(MouseEvent.CLICK, ydalit);  // кнопка, удаляет ВСЕ картинки
    trace(arry[1]);  // все окей, показывает нужный адрес картинку
    
    // ВСЕ КАРТИНКИ ОТОБРАЖАЮТСЯ В SWF !!!!!!!
}
 
function ydalit(e:MouseEvent):void
{
       arry.splice(0,obheekolli4_2);  // все работает пишет undefined
       trace(arry[1]); // нет ссылок!!!!! undefined
}
Все работает, НОооо... картинки то остались во флешке и они видны хоть и нажимаю на кнопку с undefined, а как тогда их удалить из флешки, логически рассуждая необходимо обновить список отображения не выходя из флешки. В чем ошибки???
0
TanaTiX
Модератор
2800 / 1656 / 169
Регистрация: 19.02.2011
Сообщений: 6,023
Завершенные тесты: 2
29.08.2013, 19:15 4
Покажи пример xml, я покажу как нужно.
0
29.08.2013, 19:15
Serega931
1 / 1 / 0
Регистрация: 19.08.2013
Сообщений: 46
29.08.2013, 19:35  [ТС] 5
Вот id я не использую, поэтому они повторяются.

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?xml version="1.0" encoding="utf-8"?>
<images>
    <image id="1">
        <cena>images/cena/1.png</cena>
        <big>images/big/pic1.jpg</big>
    </image>
    <image id="2">
        <cena>images/cena/2.png</cena>
        <big>images/big/pic8.jpg</big>
    </image>
    <image id="3">
        <cena>images/cena/3.png</cena>
        <big>images/big/pic3.jpg</big>
    </image>
    <image id="3">
        <cena>images/cena/4.png</cena>
        <big>images/big/pic3.jpg</big>
    </image>
    <image id="3">
        <cena>images/cena/5.png</cena>
        <big>images/big/pic3.jpg</big>
    </image>
    <image id="3">
        <cena>images/cena/6.png</cena>
        <big>images/big/pic3.jpg</big>
    </image>
    <image id="3">
        <cena>images/cena/7.png</cena>
        <big>images/big/pic3.jpg</big>
    </image>
    <image id="3">
        <cena>images/cena/8.png</cena>
        <big>images/big/pic3.jpg</big>
    </image>
    <image id="3">
        <cena>images/cena/9.png</cena>
        <big>images/big/pic3.jpg</big>
    </image>
</images>
0
TanaTiX
Модератор
2800 / 1656 / 169
Регистрация: 19.02.2011
Сообщений: 6,023
Завершенные тесты: 2
29.08.2013, 21:25 6
Вот пример, разбирай.
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.MouseEvent;
 
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, Loaded);
urlLoader.load(new URLRequest("xml/images.xml"));
 
stage.addEventListener(MouseEvent.CLICK, onRemoveALlImages);
 
var xml:XML;
var xmlList:XMLList;
var loaders:Vector.<Loader>=new Vector.<Loader>();
const IMAGE_HEIGHT:int = 50;
 
function Loaded(e:Event):void
{
    xml = XML(urlLoader.data);
    xmlList = xml.image;
 
    imagesLoaded();
}
 
function imagesLoaded():void
{
    trace("start load");
    var length:int = xmlList.length();
    var imageLoader:Loader;
    for (var i:int = 0; i < length; i++)
    {
        imageLoader = new Loader();
        imageLoader.y = IMAGE_HEIGHT * i;
        imageLoader.load(new URLRequest(xmlList[i].cena));
        trace(imageLoader.height);
        addChild(imageLoader);
        loaders.push(imageLoader);
    }
 
}
 
function onRemoveALlImages(e:MouseEvent):void
{
    var length:int = loaders.length;
    var loader:Loader;
    for (var i:int=0; i<length; i++)
    {
        loader = loaders[i];
        try
        {
            loader.close();
        }
        catch (e:Error)
        {
            trace("Image are loaded");
        }
        loader.unloadAndStop();
        removeChild(loader);
    }
    loaders.length = 0;
}
И пиши код в классах.
0
Serega931
1 / 1 / 0
Регистрация: 19.08.2013
Сообщений: 46
30.08.2013, 23:11  [ТС] 7
Большое, большое спасибо , это очень интересный пример в первые такое вижу , код работает, пожалуйста давайте его разберем, очень хочется на 100% понять, усвоить и применять в будующем этот материал .

Теперь точно понял, что такое типизированный массив, как он принимает объекты и примерную его работу. Логически рассуждая у меня в голове появился вопрос --- когда мы прописываем в цикле эти строки:
ActionScript 3
1
2
imageLoader = new Loader();
imageLoader.load(new URLRequest(xmlList[i].cena));
мы создаем объект, который сидит в оперативной памяти и далее загружаем картинку. Далее этой строкой:
ActionScript 3
1
loaders.push(imageLoader);
мы "Добавляет один или несколько элементов в конец "типизированного" массива и возвращает новую длину массива." то есть добавляет, копирует еще раз во внутрь себя(массива), а не перемещает. И так после цикла картинки загружены, типизированный массив полон объектов. Далее этими строками:
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
loader = loaders[i];  
try
{
loader.close();
}
catch (e:Error)
{
trace("Image are loaded");
}
loader.unloadAndStop();
removeChild(loader);
мы получается проверяем как условие или как присвоение или мы снова помещаем объект из массива в Loader??? Я так понимаю это условие: есть объект [i] и соответствует ли он в Loader-е, если try то "Отменяет операцию выполняемого в данный момент метода load() для экземпляра класса Loader". Хотя try..catch..finally "Обрамляет блок кода, в котором может произойти ошибка, затем реагирует на ошибку". А это loader.unloadAndStop(); "выгрузить, загруженные при помощи метода Loader.load() или Loader". Что то тут я не совсем понял логику как это все работает, шо тут вообще происходит ???
0
TanaTiX
Модератор
2800 / 1656 / 169
Регистрация: 19.02.2011
Сообщений: 6,023
Завершенные тесты: 2
30.08.2013, 23:19 8
Цитата Сообщение от Serega931 Посмотреть сообщение
то есть добавляет, копирует еще раз во внутрь себя
Нет, объект как был один, так и остался, а в массив помещается только ссылка на него.
Цитата Сообщение от Serega931 Посмотреть сообщение
мы получается проверяем как условие или как присвоение
Не понял фразу.
ActionScript 3
1
loader = loaders[i];//тут мы получаем ссылку на объект из массива, так удобней и быстрее. Удобней потому что не нужно каждый раз прописывать индексы массива, мы работаем непосредственно с нужным объектом. А быстрее потому что не нужно каждый раз вычислять по индексу к какому объекту обратиться - это уже работа ФП на уровне памяти, но так быстрее.
Цитата Сообщение от Serega931 Посмотреть сообщение
если try то "Отменяет операцию выполняемого в данный момент метода load
Этот блок кода только на тот случай, если у нас не завершена загрузка. Вообще конструкция try-catch достаточно затратная и ее стоит по возможности избегать. В качестве альтернативы можно было бы использовать счетчик завершенных загрузок, но это гораздо больше кода.
unloadAndStop удаляет загруженный объект из памяти. В общем достаточно было бы и unload, т.к. unloadAndStop более ориентирован на загружаемые swf.
0
Serega931
1 / 1 / 0
Регистрация: 19.08.2013
Сообщений: 46
30.08.2013, 23:51  [ТС] 9
Сейчас все понял!!! большое, большое спасибо
0
30.08.2013, 23:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2013, 23:51

Я сделал циклом for, а как записать задание циклом do.while?
Я сделал задание циклом for, а теперь не знаю как сделать do...while { class Program { ...

Пытаюсь переписать код с циклом for, в код с циклом while, но не совсем получается
Возникло пару вопросов: #include &lt;iostream&gt; using namespace std; int main () { for (int i...

Сопоставить фрагменту программы с циклом while соответствующий ей фрагмент программы с циклом For
Сопоставьте фрагменту программы с циклом while соответствующий ей фрагмент программы с циклом For:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru