2011-03-23 18 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