2011-03-23 17 views
0

我有一個對象數組,每個對象在第一次創建時都會分配一個ID。我賦予用戶在視覺上重新排列對象的能力,這會改變它們在陣列中的位置。然後他們可以選擇使用flash共享對象或「cookie」保存該訂單,然後,如果他們重新打開Flash文件,我希望他們能夠點擊按鈕來恢復該訂單。我只是不確定在數組中設置對象索引的語法是什麼。這裏是我的代碼:將閃存中的數組重新排列爲as3

變量:

var project_settings = SharedObject.getLocal("settings"); //saves all project settings for the next time the file is opened 
var project_order:Array = []; //saves project order for the next time the file is opened 
var project_display:Array = []; //saves whether each project should be displayed or hidden for the next time the file is opened 

節省代碼:

function saveOrder(){ 
    for (var i=0;i<project_array.length;i++){ 
     project_order[i] = project_array[i].id; 
     project_display[i] = project_array[i].projectThumb.thumbActive; 
    } 
    project_settings.data.order = project_order; 
    project_settings.data.active = project_display; 
    //trace (project_settings.data.active[1]); 
    project_settings.flush(); //saves most recent "cookie" 
} 

復位代碼:

function loadOrder(){ 
    for (var i=0;i<project_array.length;i++){ 
/* NEED THE CODE THAT GOES HERE. BASICALLY, PROJECT_ARRAY[i] SHOULD BE THE ITEM WITH AN ID EQUAL TO PROJECT_SETTINGS.DATA.ORDER[i] */ 
    } 


} 

回答

1

像這樣的東西應該工作:

function loadOrder() 
{ 
    var dict = new Dictionary(); 

    for (var i = 0; i < project_array.length; i++) 
     dict[project_array[i].id] = project_array[i]; 

    project_array = []; 

    for (var i = 0; i < project_settings.data.order.length; i++) 
     project_array[i] = dict[project_settings.data.order[i]]; 
} 
+0

這個完美工作。謝謝! – mheavers 2011-03-24 17:41:04

0

只需加載您的陣列並對ID進行排序即可。像這樣的東西應該工作:

private function _loadArray():void 
{ 
    // fill in your array 
    project_array.sort(this._sortFunc); 
} 

// replace the * by whatever your object type is 
private function _sortFunc(a:*, b:*):int 
{ 
    return a.id - b.id; 
} 

更多信息:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html#sort()

甚至sortOn()功能(這可能是更容易)應該工作: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html#sortOn()

+0

這是行不通的。 'project_array'包含需要排序的對象。 'project_settings.data.order'包含所需對象的ID。你的解決方案完全忽略了第二個數組。 – 2011-03-24 08:33:22

+0

我想你只是真的需要一個數組。 project_array包含位置ID加上您想要排序的信息。在用戶重新排列它們之後,我會根據ID對該數組進行排序,並按順序將其保存在SharedObject中,以便它始終按正確的順序排列。除此之外,Gerhard提出的解決方案應該可行。 – divillysausages 2011-03-24 09:32:37

+0

你可能是對的sausageboy - 然而兩個數組並不需要 - > – mheavers 2011-03-24 17:40:22