2009-07-09 4 views
2

Я знаю, это простой вопрос, чтобы сохранить строки и числа с 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; 

I получить эту ошибку:

TypeError: Error #1034: Type Coercion failed: cannot convert [email protected] to GameStage. 

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

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

ответ

6

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

You can store typed ActionScript instances in shared objects. You do this by calling the flash.net.registerClassAlias() method to register the class. If you create an instance of your class and store it in the data member of your shared object and later read the object out, you will get a typed instance. By default, the SharedObject objectEncoding property supports AMF3 encoding, and unpacks your stored instance from the SharedObject object; the stored instance retains the same type you specified when you called the registerClassAlias() method.

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

2

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

Смежные вопросы