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 中的任何一个匹配职位?

4

1 回答 1

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

让我知道这是否有帮助

于 2013-04-22T11:04:51.373 回答