Помощь · Поиск · Пользователи · Календарь
Полная версия этой страницы: Функция СЕЙВГЕЙМ.
Flash Zone Forum > Macromedia Flash > Общие вопросы
Eyronz
Помогите, кто знает! Пишу РПГ, а без сохранеия игрушка не интересной выйдет. huh.gif
MustLive
Eyronz

Как я уже неоднократно говорил на форуме (относительно сохранения данных во флеше), флеш сам не поддерживает сохранение данных.

Единственный вариант - это через сервер. Передать данные на скрипт (perl/php/др.), который сохранит данные.

Можешь сделать БД, в которую будут записываться сейвы игроков (по имени игрока), и после запуска игры (и авторизации) игрок сможет загрузить игру с сейва. Т.е. данные (сейва) будут передаваться/приниматься на/с сервера.

P.S.

В последних версиях флеша (с 7й, а зачатки этого были заложены ещё в 6й), появилась возможность использовать флеш-кукисы. Но сильно на них рассчитывать не стоит (и до сих пор эта методика сильно не распространилась). Сервер - это классический и проверенный вариант.
tiHo
Мона вот так:

Код
so=SharedObject("save")
save_but.onRelease=function(){
so.data.score=score_txt.text
}

view_but.onRelease=function(){
view_txt.text=so.data.save
}


Тут информация берется из текстового поля и сохраняется в локальный объект. потом можно ее и вызвать обратно.

условия:
AS2(mx)
текстовое поле view_txt (dynamic)
текстовое поле save_txt (input)


и вообще посмари в стандартном хелпе про SharedObject.
у меня F-mx 2004 pr. там работает.
MustLive
Флеш-кукисы, о которых я и говорил.

Как сказано в хелпе Флеш 8:

SharedObject

public dynamic class SharedObject
extends Object

The SharedObject class is used to read and store limited amounts of data on a user's computer. Shared objects offer real-time data sharing between objects that are persistent on the user's computer. Local shared objects are similar to browser cookies.

Причём: Availability: ActionScript 1.0; Flash Player 6

Т.е. ещё в 6м флеше были SharedObject, только я на них внимания не обратил (и так и не использовал). И как я глянул только что в хлепе, причина этому следующая: в хелпе 6го нет описания SO. Совсем. Во всём хелпе лишь один раз встретилась строка "SharedObject", в упоминании суфиксов (_so SharedObject).

А в плеерах я столкнулся с флеш-кукисами как раз с 7го, тогда наверное Макромедия во флеш 7 в хелпе нормально описала SO, вот и начали люди юзать их smile.gif

В общем, спасибо tiHo за полезную инфу.
MustLive
Цитата(tiHo @ 30.04.2006 - 12:29)
Мона вот так:

Код
so=SharedObject("save")
save_but.onRelease=function(){
so.data.score=score_txt.text
}

view_but.onRelease=function(){
view_txt.text=so.data.save
}


Тут информация берется из текстового поля и сохраняется в локальный объект. потом можно ее и вызвать обратно.

tiHo

Это полезный материал!

SharedObject - флеш кукисы. О которых я упоминал, но инфы по ним у меня небыло (по использованию). Что сегодня с помощью tiHo мы исправили wink.gif

Серверный вариант всё ещё остаётся классическим и наиболее проверенным и зарекомендовавшим себя. Но он тоже не лишён недостатков (требует написания больше кода, в том числе и серверного, и требует доступа в инет), в сравнении с флеш-кукисами. Поэтому в зависимости от задачи, можно и флеш-кукисы SharedObject использовать, когда не нужно централизированное хранение данных, когда не нужно защищать и авторизировать доступ к данным (ведь локальные кукисы можно "забрать", "модифицировать", в общем это не является надёжным хранилищем данных), и когда нет доступа в инет, или не хочется к нему привязываться, и/или есть ограничения на использование сервера для записи/чтения данных.

Например для сейва игр SharedObject - это оптимальный вариант (нередко сталкивался с такими игрушками). Хотя пока мало ещё флеш-игр практикуют сейвы, ну а для "рекордов" серверный вариант - это единственный вариант.

Нужно лишь помнить, что пользователь может запретить запись кукисов в настойках флеш плагина/плеера. Хотя по умолчанию она включена. Поэтому стоит на сайте/в игре порекомендовать юзерам в обязательном порядке "включить флеш-кукисы", чтобы иметь возможность сохранятся.

Замечу, что приведённый tiHo у меня не заработал (во флеш 8), пришлось его модифицировать:
Код
var so:SharedObject = SharedObject.getLocal("save");
save_but.onRelease=function(){
    so.data.score=save_txt.text;
    so.flush();
}
view_but.onRelease=function(){
    view_txt.text=so.data.score;
}


Также замечу, что разные версии флеш плееров пишут (по умолчанию) в разные папки (пути) свои кукисы.

В частности 7й плеер в папке Flash Player создаёт папку localhost и в ней уже путь к кукису. А вот 8й плеер делает в папке Flash Player вначале папку #SharedObjects, потом 8KDSNQPQ (случайный набор) а лишь потом localhost и путь к кукису. Это нужно учитывать.

Это нужно учитывать. А то люди с флеш плеерами/плагинами разных версий (и у одного человека м.б. несколько разных плееров/плагинов) могут столкнуться с некоторыми трудностями.

P.S.

В следующих номерах нашей флеш рассылки я обязательно уделю внимание флеш-кукисам - практическому использованию SharedObject.
tiHo
MustLive!!

мой скрипт неработал по (как я думаю) 2 причинам.

1. у меня флеш 7.
2. я написал ето сразу же и не проверял на флеш(наверное етого ненадо было делать, ибо форум-святое творение, и размещать на нем непроверенную информацию - это грех, дети мои).
biggrin.gif
Вот так выразился.
tongue.gif
Rohan
так ведь запутаться можно... Кукисы - есть кукисы. Класс Cookies никто не отменял (хоть и не документировал), а Shared Object - это Shared... Object... smile.gif
MustLive
Rohan smile.gif

Суть Shared Object как раз сводится к флеш варианте кукисов, и сама Макромедия (в хелпе 8го) так и пишет, как я уже писал ранее, что:
Цитата
Local shared objects are similar to browser cookies.

Т.е. флеш-кукисы smile.gif Как переводчики на русский флеш хелпа будут переводить данный фрагмент хелпа (и будут ли обзывать Shared Object кукисами) - это их дело, но в моей интерпритации SO будут флеш-кукисами. Конечно я буду подчеркивать, что это SO.

Кстати, по теме сохранения данных. Можно использовать и обычные (браузерные) кукисы. С помощью передачи данных ява-скрипту из флеша, который и запишет кукисы в браузер. При чтении кукиса из js передаются данные во flash. Это хитрый, но возможный вариант smile.gif С использованием "стандартных" кукисов. В этом случае можно обойти не полную совместимость кукисов в разных версиях флеш плагинов (что разные пути и поэтому разные кукисы), но зато получится привязка к браузеру (конкретному, в разных браузерах своих кукисы, да и флеш-кукисы могут работать как в браузере, так и в стационарном плеере).

Цитата
Класс Cookies никто не отменял (хоть и не документировал)

По поводу Cookies ты мог бы вполне поделится своими знаниями. Ведь класс не документированный. Можешь поделится своим опытом работы с данными кукисами. Пока же основным инструментом будут SO (ну и серверный вариант), а Cookies нужно будет исследовать и потихоньку использовать, а там и Адоб его задокументирует.

Было бы неплохо сравнить возможности Cookies и Shared Object.

По поводу Cookies я уже написал в другой теме:
/forum/index.php?s=&sho...findpost;&p;=2838
Rohan
similiar = близкий, подобный, так что не то же smile.gif
Цитата(MustLive @ 1.05.2006 - 03:23) *
По поводу Cookies ты мог бы вполне поделится своими знаниями. Ведь класс не документированный.

пжлст:
Код
Cookie.setCookie ('<test>fckin cookie xml</test>');
var cxml:XML = Cookie.getCookie ();
cxml.ignoreWhite = true;
cxml.onLoad = function ():Void {
   trace ("content: " + this.childNodes);
};
- по сути то же самое что и SharedObject, но работает с ХМЛями. Как по мне, изначально появился именно этот класс, т.к. он есть менее навороченным.
И вообще, ASSetPropFlags - во флеше еще много всего интересного... Кто бы этому описание придумал? А то ведь половина из недокументированного фиг знает как работает и для чего вообще нужна...
MustLive
Цитата(Rohan @ 1.05.2006 - 11:32) *
Код
Cookie.setCookie ('<test>fckin cookie xml</test>');
var cxml:XML = Cookie.getCookie ();
cxml.ignoreWhite = true;
cxml.onLoad = function ():Void {
   trace ("content: " + this.childNodes);
};
- по сути то же самое что и SharedObject, но работает с ХМЛями. Как по мне, изначально появился именно этот класс, т.к. он есть менее навороченным.

Интересный пример wink.gif. Как я писал ранее, Cookie этой ночью я исследовал (его XML сущность), и код написал для использования. Пока нового ты ничего не добавил, но всё ещё впереди.

ignoreWhite - тоже интересный момент. Я его в своём примере не привёл (в примере я вообще кукис не хмльный использовал, так что у тебя пример более правильный).

Было бы интересней рассмотреть вариант более серьёзного кукиса, с несколькими xml-полями. И их перебором.

Вот что я набросал:
Код
myCookie = "<test>fckin cookie xml</test><test>fckin cookie xml2</test>";
Cookie.setCookie (myCookie);
var cxml:XML = Cookie.getCookie ();
cxml.ignoreWhite = true;
cxml.onLoad = function () {
    for (var aNode:XMLNode = this.firstChild; aNode != null; aNode = aNode.nextSibling) {
        trace(aNode);
    }
};

Здесь в плане работы с XML можно много чего интересного напрограммить.
Цитата
И вообще, ASSetPropFlags - во флеше еще много всего интересного... Кто бы этому описание придумал? А то ведь половина из недокументированного фиг знает как работает и для чего вообще нужна...

И эти все незадокументированные и интересные моменты нужно исследовать и продемонстрировать широким слоям флеш-разработчиков.

И исследованием, структурированнием и описанием этого всего мог бы ты занятся в том числе - надеятся на других сильно не приходится. Мы бы могли этим вместе здесь на форуме занятся, по немногу не спеша, но исследовать и популяризировать undocumented возможности флеша. А популяризировать, помимо чтения посетителями страниц форума, мы можем в нашей рассылке, где, как я уже писал, я планирую начать цикл материалов по SharedObject, а также по Cookie. Там же можно и другие интересности рассмотреть.

Также я у меня есть планы помимо undocumented, рассматривать другие интересные (нестандартные, малоизвестные, хотя и документированные, но нечасто используемые) аспекты применения Action Script. Сделаю раздел Flash for Advanced Use (Флеш для продвинутых). Так что продвигать в массы возможность есть (инструмент), осталось лишь материал подготавливать.
MustLive
Дальнейшая дискуссия о Shared Object и Cookie вынесена в отдельную тему:
/forum/index.php?showtopic=506
JoyStick
Shared object я использую давно и приблизительно понял как найти сами файлы на компьтере, но вот где они хранятся на смартфоне с FlashLite 2 плеером, в котором так же чудесно работают - загадка huh.gif
MustLive
Цитата
Shared object я использую давно и приблизительно понял как найти сами файлы на компьтере

JoyStick

На компьютерах с ОС Windows 2000 / XP шаред объекты сохраняются в папке пользователя - Системный диск:\Documents and Settings\Имя пользователя\Application Data\Macromedia\Flash Player\.

Причём для разных версий флеш плеера путь отличается (в папке Flash Player), о чём я писал в статье Сохранение данных во флеш на локальный компьютер в 12 номере нашей рассылки.

Цитата
но вот где они хранятся на смартфоне с FlashLite 2 плеером

Поищи внимательно на смартфоне и найдёшь папку с шаредами. Поищи её или утилитами на смартфоне или подключи к ПК и специальными утилитами (что более удобно) исследуй свой смартфон.
Русская версия IP.Board © 2001-2009 IPS, Inc.