2013-04-22 25 views
0

我有一些拖放功能,其中有8項(dragArray)可以放在2個大着陸區(matchArray)上。但是因爲我不希望他們彼此躺在一起,我已經在他們的位置(posArray)中創建了一個數組。如何選擇數組的一部分?或者將一個陣列的某些部分與另一個陣列的部分進行匹配

var dragArray:Array = [drag_1, drag_2, drag_3, drag_4, drag_5, drag_6, drag_7, drag_8]; 
var matchArray:Array = [drop_1, drop_1, drop_1, drop_1, drop_2, drop_2, drop_2, drop_2]; 
var posArray:Array = [{x:412,y:246},{x:530,y:218},{x:431,y:186},{x:470,y:152},{x:140,y:111},{x:108,y:162},{x:179,y:210},{x:113,y:254}]; 

當所有8個項目都將被丟棄,檢查按鈕出現,我要檢查,如果他們被丟棄到正確的大着陸區。我嘗試使用以下:

if (posArray[i].x != dragArray[i].x || dragArray[i].y != posArray[i].y) 

但後來,不僅着陸區必須匹配,但持倉量也必須匹配。

當我使用

if (matchArray[i].x != dragArray[i].x || dragArray[i].y != matchArray[i].y) 

這是行不通的,因爲(dragArray)項目位置不與(matchArray)着陸區的報名點相匹配。

是否有任何方法檢查前4個(drag_1,drag_2,drag_3,drag_4)項是否與前4個posArray位置中的任何一個匹配,並且最後4個(drag_5,drag_6,drag_7,drag_8)最後4個posArray職位?

+1

,我不知道如果我完全理解這個問題,但它的聲音,而不是使用像你需要一個嵌套循環,我要同時遍歷兩個集合,您可能需要爲另一個數組的每個元素遍歷一個數組(可能使用布爾值來跟蹤在遍歷內部循環時是否出現了某種情況)。 – shaunhusain 2013-04-22 09:37:25

+0

我不是一個真正的動作英雄,所以我不知道我是否也理解你,但這聽起來很合理。 嵌套你的意思是類似 'if((posArray(0)|| posArray(1)|| posArray(2)|| posArray(3))。x!= dragArray [i] .x || dragArray [i ] .y!=(posArray(0)|| posArray(1)|| posArray(2)|| posArray(3))。y)' 但是可能寫完全別的,但有了這個想法。 或者我現在錯過了這一點? – wortle 2013-04-22 10:25:02

+0

嘗試此操作 if(((posArray [0] || posArray [1] || posArray [2] || posArray [3])。x!=(drag_1 || drag_2 || drag_1 || drag_4).x ||(drag_1 || drag_2 || drag_1 || drag_4).y!=(posArray [0] || posArray [1] || posArray [2] || posArray [3])。y)||((posArray [5] || posArray [6] || posArray [7] || posArray [8])。x!=(drag_5 || drag_6 || drag_7 || drag_8).x ||(drag_5 || drag_6 || drag_7 || drag_8).y!=(posArray [5] || posArray [6] || posArray [7] || posArray [8])。y))' 但沒有運氣。猜猜我錯過了點... – wortle 2013-04-22 10:44:01

回答

1

如果目標是檢查一個集合中的每個元素與另一個集合的所有元素,那麼您需要有兩個循環,一個「嵌套」在另一箇中。該算法在AS3的一般形式如下

var allMatched:Boolean = true; 

for(var i:Number=0; i<array1.length; i++) 
{ 
    var matchFound:Boolean = false; 
    for(var j:Number=0; j<array2.length; j++) 
    { 
     if(array1[i]==array2[j]) 
     { 
      matchFound=true; 
      break; //exit the inner loop we found a match 
     } 
    } 
    if(!matchFound) 
    { 
     allMatched=false; 
     break; //we found an element in one set not present in the other, we can stop searching 
    } 
} 
if(allMatched) 
    trace("Everything from array1 was found somewhere in array2"); //For an element a in the set A there exists an element b in set B such that a = b 

讓我知道,如果這有助於

+0

謝謝。它看起來不錯。但我很難根據自己的具體情況進行裁剪。 我想你的代碼應該替換我的if(posArray [i] .x!= ...),並且我應該使用if(allMatched)來執行我想用我的if-code 。我想你的「array1」應該是我的「dragArray」,你的「array2」應該是我的「posArray」。我對麼? 你認爲如果我爲2個循環,一個用於'i <4;'和一個用於'3 wortle 2013-04-22 12:38:28

+0

沒問題,是的,你可以認爲array1 array2將被你想檢查的數組替換。就範圍而言,您可能會說要麼將它們分成兩個循環,要麼您可以查看文檔中Array所提供的方法,很可能其中一些方法可以幫助您在比較之前適當地分離它們(謹慎你用這些方法做的一些修改原始數組有些返回一個新的)。 http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/Array.html – shaunhusain 2013-04-22 12:46:35

+0

明天我會給它一個鏡頭,然後回覆你。再次感謝。 – wortle 2013-04-22 14:48:10

相關問題