2009-07-09 19 views
2

Ich weiß es einfach ist, zu speichern, Strings und Zahlen mit einem Shared, und ich bin auch mit dieser Art der Sache vertraut:Welche Datentypen unterstützt ein SharedObject?

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

Allerdings bin versucht, ich ein Objekt der Klasse Games zu speichern, eine Klasse, die ich definiert habe, um Daten über Phasen in meinem Spiel zu halten. Diese Art der Sache scheint nicht zu funktionieren:

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

Dieser Code keinen Fehler werfen, aber wenn ich versuche, später die Bühne zum Abrufen von Daten, etwa so:

stageOne = sharedObject.data.stageOne; 

I Fehler:

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

Ich denke, meine Frage ist: genau welche Art von Datentypen können in einem SharedObject gespeichert werden? Überall, wo ich online gesucht habe, habe ich diese Frage mit "alles, was in Flash verwendet werden kann" beantwortet, was nicht sehr aussagekräftig ist - offensichtlich funktioniert meine GameStage-Klasse auch in Flash. Gibt es etwas über das Abrufen von Daten aus dem SharedObject, das mir nicht bekannt ist?

Meine Vorhersage ist, dass ich meine Stage-Daten nicht auf diese Weise speichern kann. Wenn dies der Fall ist, könnte jemand eine alternative Methode zum Speichern der Daten vorschlagen?

Antwort

6

können Sie speichern alle Objekt in einem SharedObject, aber Sie müssen zuerst die Klasse registrieren:

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.

Ein Nachteil ist, dass das Speichern von Objektgraphen manchmal zu Speicherproblemen führen kann. Es gibt eine Begrenzung für die Menge, die Sie in SharedObject speichern können, bevor es den Benutzer benachrichtigt und nach der Berechtigung zum Speichern von mehr fragt. Dieser Schwellenwert ist standardmäßig 100k, glaube ich.

2

Wenn Sie Flex Builder SDK oder Flex Builder verwenden, können Sie auch den Metatag [RemoteClass] verwenden, der die Klasse automatisch registriert und serialisierbar macht.

Verwandte Themen