Невозможно сохранить объекты класса в файл SharedObject
Ну, в основном, как следует из названия, я не могу сохранить свой массив в общий объект.
У меня есть массив, который содержит разных "солдат" с разными характеристиками (здоровье, броня, оружие, положение, опыт, уровень) и т. Д., И мне было интересно, как мне их спасти. Когда я перезагружаю swf, я получаю эту трассировку (",,,"), но перед тем, как перезагружать ее, я получаю правильное чтение массива.
Это мой код, если он помогает:
//Saving game
function saveGame(E:MouseEvent){
var so:SharedObject = SharedObject.getLocal("saveFile"); //Instantiating the shared object
so.data.savedUnitArray = towerDefenceMain.unitArray;// is the array that stores the Soldiers
trace(so.data.savedUnitArray); //returns correct trace
so.flush();//Saving the operation
}
//Loading the data back
var so:SharedObject = SharedObject.getLocal("saveFile");
if(so.data.savedUnitArray != undefined){
unitArray = so.data.savedUnitArray;
trace(unitArray); //returns (",,,,")
}
1 ответ
Чтобы сохранить пользовательский объект, вы должны либо сделать все его свойства общедоступными и доступными, И не иметь ссылок на DisplayObjects, либо реализовать IExternalizable
и определить writeExternal()
а также readExternal()
методы. Обратите внимание, что если ваш объект читается из другого места, он сначала инициализируется через нулевой вызов параметра в своем конструкторе, а затем экземпляр readExternal()
вызывается.
Руководство по IExternalizable
Пример:
public class Tower2 extends Obstacle implements gameRunnable,IExternalizable {
// HUGE set of statistics skipped, all methods skipped
public function writeExternal(output:IDataOutput):void {
output.writeInt(gemType);
output.writeInt(gemGrade);
output.writeBoolean(affectsFlying); // as some gems might be elongated, saving this
output.writeInt(_targetMode); // placeholder for targetting
output.writeInt(kills);
// hehe, what else to write in here? Everything else is derivable
}
public function readExternal(input:IDataInput):void {
var gt:int = input.readInt();
var gg:int = input.readInt();
MakeGem(gt, gg); // this is the function that initializes everything that's the tower
raised = true; // will place manually if ever
affectsFlying = input.readBoolean();
gt = input.readInt();
SetTargetting(gt);
kills = input.readInt(); // kills
updateDamage(); // this updates damage respective to kills counter
}
Таким образом, для ваших солдат вам нужно только сохранить важные данные и воссоздать все остальное, как только вы загрузите свой набор солдат из общего объекта.