如何在Flash Adob​​e Air中保存和加载对象

时间:2012-02-26 22:42:37

标签: flash actionscript air filestream

我觉得我在这里有点偏离 - 我需要想办法让用户在我正在建造的外太空游戏中保存他们的星系。在最基本的层面上,我需要将随机生成的galaxy(它是一个自定义类的实例)写入磁盘,然后再从磁盘中读取它。我之前没有使用Air的文件流功能,而且我遇到了一些麻烦。我的代码:

    public function saveGame(e:MouseEvent):void
    {
        trace("save");
        var file:File = File.desktopDirectory.resolvePath("test.sv");

        var fileStream:FileStream = new FileStream();
        fileStream.open(file, FileMode.WRITE);
        fileStream.writeObject(gal);
        fileStream.close();
    }

    public function loadGame(e:MouseEvent):void
    {
        trace("load");

        var file:File = File.desktopDirectory.resolvePath("test.sv");

        if (file.exists)
        {
            var obj:Object;
            var fileStream:FileStream = new FileStream();
            fileStream.open(file, FileMode.READ);
            obj = fileStream.readObject();
            fileStream.close();
            trace(obj);
        }
    }

对象“gal”是我的星系,我已经验证它是我的对象的有效实例(它包含子节点,它包含许多变量)但由于某种原因,在桌面上创建的文件只有1个字节 - 显然太小,无法包含任何信息。

当我在第二个函数中跟踪对象时,它为null。

对此的任何帮助都将非常感激,因为很难找到像我这样的初学者清楚解释的这些信息。

感谢您的任何见解。

3 个答案:

答案 0 :(得分:0)

为什么不保存一些XML或者你可以读入并解析为对象的东西?

答案 1 :(得分:0)

以前曾提出过类似的问题。看看答案: IExternalizable (as3)Saving application state AIR

答案 2 :(得分:0)

我认为我们只能序列化动态对象,并将其保存为json。 像XML,Array,Object,dictionary就可以做到这一点。确保它们的元素是基本类型,动态类实例可以是interate。