我有一个AS3文档,其中包含大约200个我正在尝试保存到数据库的单个元素。我只需要在舞台上保存有关其物理属性的信息。
有很多方法可以做到这一点,但推荐的方法是什么?
后端是PHP / MySQL,它不是双向交换。保存完毕。
答案 0 :(得分:2)
答案 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属性。