Какие типы данных поддерживает SharedObject?
Я знаю, что хранить строки и числа с 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 ответа
Вы можете сохранить любой объект в SharedObject, но сначала вам нужно зарегистрировать класс:
Вы можете хранить типизированные экземпляры ActionScript в общих объектах. Это можно сделать, вызвав метод flash.net.registerClassAlias () для регистрации класса. Если вы создадите экземпляр своего класса и сохраните его в элементе данных вашего общего объекта, а затем прочитаете объект, вы получите типизированный экземпляр. По умолчанию свойство objectEncoding SharedObject поддерживает кодировку AMF3 и распаковывает сохраненный экземпляр из объекта SharedObject; сохраненный экземпляр сохраняет тот же тип, который вы указали при вызове метода registerClassAlias ().
Одним из предостережений является то, что хранение графов объектов может иногда приводить к проблемам хранения. Существует ограничение на то, сколько вы можете хранить в SharedObject, прежде чем он уведомит пользователя и запросит разрешение на сохранение. Я полагаю, что по умолчанию этот порог равен 100К
Если вы используете Flex Builder SDK или Flex Builder, вы также можете использовать метатег [RemoteClass], который автоматически зарегистрирует класс и сделает его сериализуемым.