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

Comer 14.08.2015 16:11

Как сохранить изменения?
 
Уважаемые флеш-мастера!
Очень прошу вас на моём конкретном примере разъяснить мне, как сохранить изменение в ролике.
Суть примера проста. На экране видна картинка 1. После нажатия на неё она скрывается, и открывается картинка 2.
Как сделать кнопку "Сохранить" так, чтобы при повторном открытии ролика сразу была видна картинка 2?
Какой код нужно прописать? И, по возможности, объясните мне, за что отвечает каждая его строчка.
Я всё никак не могу с этим разобраться. Помогите мне, пожалуйста!

Вот мой код переключения картинок:

Код AS3:

img1.addEventListener(MouseEvent.CLICK, fl_ClickToHide_2);
 
function fl_ClickToHide_2(event:MouseEvent):void
{
img1.visible = false;
img2.visible = true;
}
 
img2.addEventListener(MouseEvent.CLICK, f2_ClickToHide_2);
 
function f2_ClickToHide_2(event:MouseEvent):void
{
img1.visible = true;
img2.visible = false;
}

А здесь сам пример ролика:
http://intertraining.at.ua/flash_swf...khranenija.swf

Bletraut 14.08.2015 19:40

SharedObject. Ищите в поисковиках как использовать.

tattori 14.08.2015 19:55

с помощью SharedObject создаешь файл для сохранения и сохраняешь значения туда потом берешь от туда нужные, вот дополнение для твоего кода
Код AS3:

var saveFile:SharedObject = SharedObject.getLocal("saveFile");/* создаем переменную для сохранения и даем имя файлику куда это все будет сохраняться */
 
if(saveFile.data.num_Img == null)// если ячейка сохранения с именем num_Img пуста, то показать img1
{
        img1.visible = true;
        img2.visible = false;
}
else if(saveFile.data.num_Img == "img1")// если ячейка сохранения с именем num_Img равна "img1", то показать img1
{
        img1.visible = true;
    img2.visible = false;
}
else// в противном случае показать img2
{
        img1.visible = false;
    img2.visible = true;
}
 
img1.addEventListener(MouseEvent.CLICK, fl_ClickToHide_2);
 
function fl_ClickToHide_2(event:MouseEvent):void
{
saveFile.data.num_Img = "img2";// значение ячейки с именем num_Img равно "img2"
img1.visible = false;
img2.visible = true;
}
 
img2.addEventListener(MouseEvent.CLICK, f2_ClickToHide_2);
 
function f2_ClickToHide_2(event:MouseEvent):void
{
saveFile.data.num_Img = "img1";// значение ячейки с именем num_Img равно "img1"
img1.visible = true;
img2.visible = false;
}


Comer 14.08.2015 20:08

Цитата:

Сообщение от tattori (Сообщение 1185776)
с помощью SharedObject создаешь файл для сохранения и сохраняешь значения туда потом берешь от туда нужные, вот дополнение для твоего кода

Вы даже не представляете КАК сильно мне помогли! Да, это именно то, что нужно. Огромное Вам спасибо!

caseyryan 14.08.2015 21:54

уже давно не пользовался шерд обджектами, но если мне память не изменяет, то не запишет он никакие данные простым присвоением. Надо после всех этих манипуляций дернуть еще метод flush()

udaaff 14.08.2015 22:14

Цитата:

Сообщение от caseyryan (Сообщение 1185787)
уже давно не пользовался шерд обджектами, но если мне память не изменяет, то не запишет он никакие данные простым присвоением. Надо после всех этих манипуляций дернуть еще метод flush()

Запишет по окончании работы приложения. Без необходимости его лучше не дергать.
http://help.adobe.com/ru_RU/FlashPla...ml#flush%28%29

caseyryan 15.08.2015 09:12

Цитата:

Запишет по окончании работы приложения. Без необходимости его лучше не дергать.
Тогда получается, что если у меня в одном месте будет SharedObject.getLocal(...) то он вернет то, что хранится на жестком диске. Потом я запишу туда какие-то данные и не дерну flush(), то если в другом месте тоже будет SharedObject.getLocal(...) он вернет старую версию файла с жесткого диска. А это не есть гуд. flush() все такие лучше дергать, чтобы таких конфузов избежать

tattori 15.08.2015 15:57

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

caseyryan 15.08.2015 18:03

Цитата:

данные с шаредобджект я дергаю только в самом начале и присваиваю их значения переменным и манипулирую этими переменными и сохраняю те данные которые нужны будут при следующей загрузке, еще никогда flush()
Все зависит от целей и задач. Допустим делаешь ты интерфейс, в котором можно перемещать разные окошки и раствлять их как удобно пользователю. Тут уже никак не обойдешься вызовом в самом начале. Нодо, чтобы он запоминал положения окон? потому что на корректное завершение приложения надеяться глупо. Есть куча причин, по которым может не произойти корректное закрытие swf.
Вот я не вижу лично каких то объективных причин, чтобы не использовать flush()

udaaff 15.08.2015 19:07

Цитата:

Сообщение от caseyryan (Сообщение 1185794)
Тогда получается, что если у меня в одном месте будет SharedObject.getLocal(...) то он вернет то, что хранится на жестком диске. Потом я запишу туда какие-то данные и не дерну flush(), то если в другом месте тоже будет SharedObject.getLocal(...) он вернет старую версию файла с жесткого диска. А это не есть гуд. flush() все такие лучше дергать, чтобы таких конфузов избежать

С таким подходом, да, придется. Но логичнее получить 1 инстанс so и с ним работать. flush() выполняется синхронно и на запись данных тратится ощутимое время.

Цитата:

потому что на корректное завершение приложения надеяться глупо.
На столько же глупо, как и на надежность локальных данных.


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

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