序列化一个扩展MovieClip的类>的DisplayObject

时间:2016-04-21 00:00:05

标签: actionscript-3 serialization bytearray

我一直在我需要存储/加载的许多自定义类上使用ByteArray,但ByteArray似乎永远不会序列化正确扩展MovieClip的自定义类/对象。在读取时总会丢失数据或空值。

我在这里读到AMF无法序列化displayObjects,并想知道我是否可以使用一个好的解决方案? (没有将数据obj分流到Json并将字符串反馈给我的保存。)

进出ByteArray

public static function _SaveTRData(trData:Object):String{
    if(_trackerComp == null){
        return "ERR: -1";
    }
    var resp:String = "";
    var bytes:ByteArray = new ByteArray(); 
    bytes.writeObject(trackerData);
    resp = _trComp.SaveTRData(bytes);//to SQLlite db methods
    if(resp != ""){
        _tr.UpdateStatusMessage(resp);
    }
    return resp;
}

public static function _GetTRData(fileName:String):Object{
    if(_trComp == null){
        return null;
    }
    var resp:ByteArray = _trComp.GetTRData(fileName);//from SQLlite db methods
    resp.position = 0;
    return(resp.readObject());//returned object is passed into graphics pipeline to redraw contained data elements
}

存储的对象

var trackerData:Object = {arrPolys:new Array(), arrLabels:new Array()};
trackerData.arrPolys = maps.arrPolys();
trackerData.arrLabels = maps.arrLabels();
//Truncated, contains more arrays of objects...

//Each object in arrPolys is a
public class Polygon extends MovieClip{
    //3 private uints
    //3 private bools
    //1 private array
    //3 private custom class Line which extends Shape
}

//Each object in arrLabels is a
public class Label extends MovieClip{
    //Several private strings
    //Several private dynamically generated graphic components
    //Several private label specifications (Strings, Ints, Booleans)
}

1 个答案:

答案 0 :(得分:0)

这就是他们说显示和数据应该分开的原因。

以下是解决这个问题所需要的心态:

  • 多边形可显示的内容。它是一个点列表 已连接。也许它有基于这些的辅助信息 像多边形区域或凸起的点。这里可能还有其他东西。
  • 然后是关于如何绘制多边形的数据。它有线条粗细,线条颜色。也许填补。等
  • 最后但并非最不重要的是多边形的实际绘制。这是您的DisplayObject

根据您要存储的内容,您可以保存可轻松序列化的多边形数据和绘图配方数据。

在反序列化时,您实例化相应的类(DisplayObject)并将数据提供给它。

tl,dr :MVC

相关问题