从闪存中保存数据的最佳方法

时间:2011-03-21 21:25:04

标签: actionscript-3

我有一个AS3文档,其中包含大约200个我正在尝试保存到数据库的单个元素。我只需要在舞台上保存有关其物理属性的信息。

有很多方法可以做到这一点,但推荐的方法是什么?

后端是PHP / MySQL,它不是双向交换。保存完毕。

2 个答案:

答案 0 :(得分:2)

我会查看flash remoting / AMFPHP:http://amfphp.sourceforge.net/

这很简单,而且非常容易实现。

希望这有帮助。

答案 1 :(得分:2)

除服务器端外,存储/分配位置/旋转/缩放的好方法是使用DisplayObjects'转换矩阵:

shape.transform.matrix
sprite.transform.matrix
它相当紧凑;需要为每个对象存储6个数字。 将比例/旋转值舍入到5位小数(0.12345而不是0.123456789123456),并且转换为1位小数(0.1而不是0.123456)可以很好地保留一些Ko。 例如这个方法:

private function storeMatrix( displayObject:DisplayObject, decimals:int = 5 ):String 
{
    var str:String = '';
    var m:Matrix = displayObject.transform.matrix;

    str += m.a.toFixed( decimals ) + ':';
    str += m.b.toFixed( decimals ) + ':';
    str += m.c.toFixed( decimals ) + ':';
    str += m.d.toFixed( decimals ) + ':';
    str += m.tx.toFixed( 1 ) + ':';
    str += m.ty.toFixed( 1 );

    return str;
}

会返回类似的内容:

  

-0.95119:-0.30550:0.30550:-0.95119:110.0:110.0

并且此方法从字符串中设置位置/旋转/比例:

private function assignMatrix( str:String, _do:DisplayObject ):void 
{
    var values:Array = str.split( ':' );
    var m:Matrix = new Matrix();
    m.a = values[ 0 ];
    m.b = values[ 1 ];
    m.c = values[ 2 ];
    m.d = values[ 3 ];
    m.tx = values[ 4 ];
    m.ty = values[ 5 ];
    _do.transform.matrix = m;
}

一旦您收集了所有对象的矩阵,就可以使用AMF对它们进行序列化并存储到数据库中。上次我这样做时,我使用FZIP来进一步压缩数据(500Ko-> 20Ko)。我不认为它会对你的情况有所帮助,只是想指出它:)

注意:如果需要,您还可以以相同的方式存储对象的transform.ColorTransform属性。