Вопрос:
У меня есть вопрос: как сделать сохранялку для игры (жмёшь SAVE сохранилась(переменные записались в файл), LOAD и она загрузилась) или это невозможно?
Ответ:
Это можно реализовать двумя способами. Первый, сохранять всё в отдельные текстовые файлы, типа .txt и .xml, при помощи сторонних программ, которые добавляют функционала флешке, например MDM Zinc. Второй, более простой вариант, не использовать другие программы, и реализовывать всё через Shared Object, который так же иногда называют «кэшем-флешки». Сегодня мы разберём второй вариант.
Учимся работать с кэшем
Итак начнём. Сегодня мы разберём, как создавать объекты Shared Object и сохранять данные внутри них:
var my_so:SharedObject = SharedObject.getLocal(“nameSharedObject”);
my_so.data.myVar = “Напишите что-нибудь, и запустите флешку снова”;
1. var my_so:SharedObject = SharedObject.getL… — создаём сам объект Shared Object и считываем из кэша необходимые данные. my_so — новый созданный нами объект Shared Object. nameSharedObject — имя считываемого из кэша файла. Если флешка запускается впервый раз, и такой файл в кэше пока создан не был, то Flash автоматически создаст его.
2. my_so.data.myVar = “Напишите что-нибу… — в файле кэша создаём переменную myVar и присваиваем ей нужное значение. Необходимо помнить, что все данные, которые вы хотите сохранить в Shared Object объекте, должны являться свойствами его свойства data (*простите за тавтологию*).
Собственно вот мы и создали объект, в котором теперь можно сохранять данные и считывать их при последующих запусках флешки. Если не верите, то посмотрите пример к уроку, в котором введённое в поле слово или фраза будет сохраняться и отображаться при следующем запуске флешки.
Очищение кэша
Ах да, чуть не забыл, данные которые мы сохраняем при помощи Shared Object можно, по мере надобности, удалять, очищая кэш.
my_so.clear();
Как не тяжело догадаться, функция clear() — это и есть та самая функция, которая очищает кэш.
Сама флешка » | Исходник » |
Урок полезный, да вот такой вопрос: можно ли сделать несколько кэшев. Сохранил - 1 кэш занят, еще сохранил - 2-ой кэш занят и т.д., а когда дойдет до последнего, сохраняет с первого (циклично), но те записи, которые не перезаписываются, оставались. Или это невозможно?
Создайте объект SharedObject и поместите в него массив с объектами. И работайте с этими объектами. Таким образом «кеш» будет 1, а объектов будет храниться много.
Спасибо, помогло. Теперь буду прогу своей мечты разрабатывать.
На этом месте был комментарий, но admin его удалил, потому что, цитирую: «Спамит в нескольких темах.».
Мне хотелось бы создать нечто вроде гостевой книги, то есть нужна функция которая сохраняет не в кэшэ (не для 1 пользователя), а в файле (помему во флэш это не предусмотрено) или в самой флэшке (изменение кода, тож анриал конечно))
я на сайте adobe нашёл следующий пример(у меня он не работает почему то)
вот ссылка
http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7cf8.html#WSD7D78288-ADD8-422d-AF79-AE803643F71F
Тут нужен АПИ (Интерфейс прикладного программирования (англ. Application Programming Interface, API [эй-пи-ай]; по-русски чаще произносят [апи́]) — набор готовых констант, структур и функций, используемых при программировании пользовательских приложений и обеспечивающих правильное взаимодействие между пользовательским приложением и операционной системой). Хотя, возможен и другой способ. Но АПИ самый удобный (если вы в этом разбираетесь).
Просто я клоню к тому, что в flash cs4 я заметил такую команду как file.save(..)
Но разобраться с ней толком я не смог
Здравствуйте, а как сделать так, чтобы функция не один текст выводила для ввода и сохранения данных, а два раза.
Т.е. если первый код:
Stage.scaleMode = "noScale"; var my_so = SharedObject.getLocal("newSharedObject1"); if (!my_so.data.myVar1) { my_so.data.myVar1 = "Дата начала игры"; } // end if var my_fmt = new TextFormat(); my_fmt.font = "Tahoma"; my_fmt.size = 14; my_fmt.align = "left"; _root.createTextField("text_txt", 2, 100, 90, 100, 20); text_txt.type = "input1"; text_txt.scroll = false; text_txt.border = true; text_txt.text = my_so.data.myVar1; text_txt.setTextFormat(my_fmt); text_txt.onChanged = function () { my_so.data.myVar1 = this.text; this.setTextFormat(_root.my_fmt); }; clear_mc.onRelease = function () { trace ("Кэш очищен"); my_so.clear(); };То почему второй код с измененёнными именами не работает в том же исходнике?
Функция работает только единожды и выводит текст (для ввода и вывода) только один, а не два.
Stage.scaleMode = "noScale"; var my_so = SharedObject.getLocal("newSharedObject"); if (!my_so.data.myVar) { my_so.data.myVar = "Место для ввода сохраняемого текста"; } // end if var my_fmt = new TextFormat(); my_fmt.font = "Tahoma"; my_fmt.size = 14; my_fmt.align = "center"; _root.createTextField("text_txt", 2, 100, 90, 500, 20); text_txt.type = "input"; text_txt.scroll = false; text_txt.border = true; text_txt.text = my_so.data.myVar; text_txt.setTextFormat(my_fmt); text_txt.onChanged = function () { my_so.data.myVar = this.text; this.setTextFormat(_root.my_fmt); }; clear_mc.onRelease = function () { trace ("Кэш очищен"); my_so.clear(); };И первый и второй код работают, но отдельно в разных исходниках.
Как поменять код, чтобы можно было вывести два поля для ввода и редактирования? Какой должен быть код, кто знает, чтобы работало вместе?
Какой нужно сделать код, чтобы работало вместе, кто знает?
Ведь не обязательно нужно создавать объект SharedObject и в нём два объекта. Может можно проще, просто код два раза написать с разными именами переменных для ввода и вывода?