我有一些拖放功能,其中有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职位?
答案 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
如果有帮助,请告诉我