2011-03-21 54 views
1

我有一個AS3文檔,其中有大約200個單獨的元素,我試圖保存到數據庫中。我只需要在舞臺上保存有關其物理屬性的信息。從閃存保存數據的最佳方法

有很多方法可以做到這一點,但推薦的方法是什麼?

後端是PHP/MySQL,它不是雙向交換。保存它,完成。

+1

小貼士:讀一下amfphp的對象序列化/編組。非常快速,而且非常直接的實現。 – Bosworth99 2011-03-21 22:42:57

回答

2

開,以存儲/分配位置/旋轉的好方法/尺度是使用的DisplayObject的變換矩陣:

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屬性。

+0

我選擇這個作爲答案,因爲它使我最接近我的實際解決方案。使用變換矩陣。我還沒有實現AMF,贊成是一個簡單的張貼到外部腳本。 – jerebear 2012-08-14 03:57:35

2

我會檢查出來的Flash Remoting/AMFPHP:http://amfphp.sourceforge.net/

這實在是太straightforwad,並很容易實現。

希望這會有所幫助。

從服務器端