Помимо серверной стороны, хороший способ сохранить / назначить позицию / поворот / масштаб - использовать матрицы преобразования DisplayObjects:
shape.transform.matrix
sprite.transform.matrix
достаточно компактно; нужно хранить 6 номеров на объект.
округление значений масштаба / поворота до 5 десятичных знаков (0,12345 вместо 0,1245458989123456) и перевод до 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 таким же образом.