Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Сохранение значений (http://www.flasher.ru/forum/showthread.php?t=133363)

Milaho 03.12.2009 10:53

Сохранение значений
 
Добрый день!

Описание задачи: создаю сцену из пяти кадров по типу визарда. На каждом шаге вводятся данные в текстовые поля Input Text и на последнем кадре происходит обработка данных. Есть кнопки "Вперед" и "Назад" двигаясь по которым, необходимо, что бы в заполненных ранее полях сохранялись данные.

Что я делаю: На первом кадре создаю массив необходимой длинны, и запускаю функцию, которая обнуляет этот массив. После ввода в поле данных, соответствующему элементу массива присваивается значение. Таким образом, доходя до последнего кадра имеется набор готовый для обработки. Причем, двигаясь вперед и назад значения из массива подгружаются туда, куда необходимо, но есть одно НО....

Проблема: При переходе на первый кадр, массив снова обнуляется и соответственно все данные в нем уничтожаются :(

Какие были приняты меры:
1. При объявлении массива сразу же указывал значения всех элементов. Не помогло.
2. Обнулял массив один раз при onLoad(). Когда второй раз попадаю на первый кадр, то массив просто становится пустой.

Есть ли у кого-нибудь какие-нибудь предложения и идеи??? Сам уже моск сломал...

alexcon314 03.12.2009 11:10

Не переходите на первый кадр. Сделайте 6 каров, в первом объявите массив, и никогда на него не возвращайтесь.

mooncar 03.12.2009 11:17

Так пусть на вашем первом кадре функция, которая обнуляет массив, проверяет состояние специального триггера. Например, он устанавливается в true на втором кадре. Когда происходит возврат к первому кадру, то функция массив не обнуляет, но если первый кадр проигрывается первый раз, то значение триггера не определено, и функция должна обнулить массив.
В первом кадре:
Код AS1/AS2:

function clearArray () {
        if (!wasStarted) {
                //действия по обнулению массива
        }
}
clearArray ();

Во втором кадре:
Код AS1/AS2:

wasStarted = true ;


Milaho 03.12.2009 11:19

alexcon314, да, я думал об этом, но это я оставлю на самую безвыходную ситуацию...

alexcon314 03.12.2009 11:37

mooncar, в первом кадре происходит не просто обнуление массива, а его объявление. Тогда уж как-то так для первого кадра
Код AS1/AS2:

if(! a)
a = new Array();


mooncar 03.12.2009 11:48

Цитата:

Сообщение от alexcon314 (Сообщение 869983)
mooncar, в первом кадре происходит не просто обнуление массива, а его объявление.

Разумеется. Просто все действия для массива я оставил за символами комментариев // на усмотрение автора.

Milaho 03.12.2009 11:48

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

mooncar 03.12.2009 11:52

Цитата:

Сообщение от Milaho (Сообщение 869989)
Я думаю, что можно реализовать переприсваивание какого-нибудь временного массива

Не плодите лишних сущностей.
Сделайте как сказал alexcon314 -
Код AS1/AS2:

if(! a)
a = new Array();

"если массив не задан, то его создаем".

Milaho 03.12.2009 11:56

Друзья! Спасибо!
Совместными усилиями и мозговой атакой, решили эту проблему!!!!
Код AS1/AS2:

//Массив, хранящий в себе значения введеных данных, названия соответствуют массиву из ArInputBox
if (!arVarieble){
var arVarieble:Array = new Array(14);
}
//Заполнение массива arVariables нулями
function arVarNull(){
        for (var i:Number = 0; i < arVarieble.length; i++) {
                if(arVarieble[i]){
                        arVarieble[i]=arVarieble[i];
                }else{
                arVarieble[i] = 0; }
        }
}
function clearArray () {
        if (!wasStarted) {
                arVarNull();//действия по обнулению массива
        }
}
clearArray ();
 
// wasStarted присваевается true не на втором кадре, а при клике кнопки "Следующий"


mooncar 03.12.2009 12:07

Немного смущает
Код AS1/AS2:

if(arVarieble[i]){
        arVarieble[i]=arVarieble[i];
}else{
        arVarieble[i] = 0;
}

Почему бы вам не оставить только действия по обнулению:
Код AS1/AS2:

if(!arVarieble[i]){
    arVarieble[i] = 0;
}



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

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