Какие типы данных поддерживает SharedObject? - PullRequest
2 голосов
/ 09 июля 2009

Я знаю, что хранить строки и числа с SharedObject очень просто, и я также знаком с такими вещами:

var sharedObject:SharedObject = SharedObject.getLocal("userData");
var obj:Object = new Object();
obj.prop = "value";
sharedObject.data.userobj= obj;
sharedObject.flush();

Однако я пытаюсь сохранить объект класса GameStage - класса, который я определил для хранения данных об этапах в моей игре. Этот тип вещи, кажется, не работает:

var sharedObject:SharedObject = SharedObject.getLocal("userData");
var stageOne:GameStage = new GameStage();
stageOne.highScore = 99999;
sharedObject.data.stageOne = stageOne;
sharedObject.flush();

Этот код не выдает ошибку, но когда я пытаюсь получить данные этапа позже, например, так:

stageOne = sharedObject.data.stageOne;

Я получаю эту ошибку:

TypeError: Error #1034: Type Coercion failed: cannot convert Object@3d220629 to GameStage.

Я предполагаю, что мой вопрос: какие именно типы данных могут храниться в SharedObject? Везде, где я смотрел онлайн, отвечал на этот вопрос «всем, что можно использовать во Flash», что не очень наглядно - очевидно, мой класс GameStage работает и во Flash. Есть ли что-то о получении данных из SharedObject, о котором я не знаю?

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

Ответы [ 2 ]

6 голосов
/ 09 июля 2009

Вы можете сохранить любой объект в SharedObject , но сначала вам нужно зарегистрировать класс:

Вы можете хранить набранные ActionScript экземпляры в общих объектах. Ты сделаешь это путем вызова метод flash.net.registerClassAlias ​​() зарегистрировать класс. Если вы создаете экземпляр вашего класса и хранить его в данных члена вашего общего объект, а затем прочитать объект, вы получите типизированный экземпляр. От по умолчанию SharedObject Свойство objectEncoding поддерживает AMF3 кодирование и распаковывает ваши хранящиеся экземпляр из объекта SharedObject; сохраненный экземпляр сохраняет то же самое типа вы указали, когда вы позвонили Метод registerClassAlias ​​().

Одно предостережение в том, что хранение графов объектов может иногда приводить к проблемам хранения. Существует ограничение на то, сколько вы можете хранить в SharedObject, прежде чем он уведомит пользователя и запросит разрешение на сохранение. Я полагаю, что по умолчанию этот порог равен 100 КБ.

2 голосов
/ 10 июля 2009

Если вы используете Flex Builder SDK или Flex Builder, вы также можете использовать метатег [RemoteClass], который автоматически зарегистрирует класс и сделает его сериализуемым.

...