序列化扩展 MovieClip > DisplayObject 的 class

Serialize a class that extends MovieClip > DisplayObject

我一直在许多自定义 类 上使用 ByteArray 我一直需要 store/load,但是 ByteArray 似乎从未序列化扩展 MovieClip 的自定义 class/object正确。读取时总是缺少数据或空值。

我在这里读到 AMF 无法序列化 displayObjects 并且想知道是否有我可以使用的好的解决方案? (缺少将数据对象分流到 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)
}

这就是为什么他们说显示和数据应该分开。

以下是解决此问题所需的心态:

  • 多边形不是可显示的东西。这是一个点列表 是相连的。也许它有基于那些的辅助信息 点像多边形的区域或者它的凸面。这里可能还有其他内容。
  • 然后是如何绘制多边形的资料。它有线条粗细,线条颜色。也许是一个填充。等等
  • 最后但同样重要的是多边形的实际绘图。这是你的 DisplayObject.

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

在反序列化时,您实例化适当的 class (DisplayObject) 并将数据输入其中。

tl,博士:MVC