1

基本的に、タイトルが示すように、配列を共有オブジェクトに保存できません。

さまざまな特性(ヘルス、アーマー、武器、位置、経験、レベル)などを持つさまざまな「兵士」を含む配列があり、それをどのように保存するのか疑問に思っていました。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 (",,,,")
        }
4

1 に答える 1

0

カスタム オブジェクトを保存するには、そのすべてのプロパティを公開してアクセスできるようにする必要があります。さらに、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
}

したがって、兵士については、重要なデータを保存するだけでよく、共有オブジェクトから兵士のセットをロードしたら、他のすべてを再作成する必要があります。

于 2013-07-12T09:23:16.023 に答える