如何选择阵列的一部分?或者将一个阵列的部分与另一个阵列的部分匹配?

时间:2013-04-22 09:22:22

标签: actionscript-3 drag-and-drop flash-cs5

我有一些拖放功能,其中有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 个答案:

答案 0 :(得分: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

如果有帮助,请告诉我