如何比较2个数组



我有两个数组,即combo和truecompo。用户通过点击舞台上的各种按钮,用MovieClips填充组合,truecomport是正确的组合。

在任何给定的点(enterFrame)Flash都在检查两者是否相同,如果是,那么就做一些事情。就目前而言,这是我的代码(修改了好几次,比如用Typecasting索引,在combo[o]的末尾添加.Pparent等。会发生两件事,要么一件,要么另一件。

要么不满足该语句,此时将继续添加和剪切组合数组,要么在combo.length=6时立即满足该条件。检查我的代码。

更新:我有一个包含当前代码的dropbox文件。点击这里查看FLA链接,这里是SWF链接,为了方便和安全,它一如既往地被删除了

/*stage.*/addEventListener(Event.ENTER_FRAME, checkthis);
function checkthis(e:Event)
{
for(var o:int=0;o<= combo.length; o++) 
{
if((combo[o] == truecombo[o]) && (combo.length==truecombo.length))
{
equal=true;
}
}
if (equal==true)
{
stage.removeEventListener(Event.ENTER_FRAME, checkthis);
endSeq();
}
}
function endSeq():void
{
bravo.play();
for (var i:int = 0; i < combo.length; i++)
{
var element:DisplayObject = combo[i];
element.parent.removeChild(element);
}
firebb.gotoAndPlay(2);
windbb.gotoAndPlay(2);
spiritbb.gotoAndPlay(2);
earthbb.gotoAndPlay(2);
}

这就是我将新元素推送到组合数组的方式。

function add(element:DisplayObject)
{
twist.gotoAndPlay(2);
element.width = WIDTH;
element.height = HEIGHT;
if (this.combo.length >= MAX_ELEMENTS)
{
removeChild(this.combo.shift());
}
this.combo.push(element as DisplayObject);
this.addChild(element);
this.reorder();
}
function reorder()
{
for (var i:int = 0; i < combo.length; i++)
{
var element:DisplayObject = combo[i];
element.x = OFFSET_X + (i * SEP_X);
element.y = OFFSET_Y;
}
}

这就是我创建truecomport及其内容的方式。

var fireb:firebtn = new firebtn();
var spiritb:spiritbtn = new spiritbtn();
var earthb:earthbtn = new earthbtn();
var windb:windbtn = new windbtn();
var combo:Array=new Array();
const truecombo:Array = [fireb,windb,spiritb,windb,earthb,fireb];

很抱歉没有评论,我想这是不言自明的。提前谢谢。

我相信combo[o]&CCD_ 2是同一类的两个实例&你希望他们匹配。如果是这种情况,您可以考虑:

getQualifiedClassName(combo[o]) == getQualifiedClassName(truecombo[o])

为了匹配你所做的方式,你必须确保truecomport中的对象引用的是舞台上的相同对象&而不是新实例。


编辑:

当比赛成功时,你似乎没有打破循环。使用这个替代:

function checkthis(e:Event)
{
for(var o:int=0;o<= combo.length; o++) 
if((combo[o] == truecombo[o]) && (combo.length==truecombo.length)) {
equal=true;
break;
}     
if (equal) {
stage.removeEventListener(Event.ENTER_FRAME, checkthis);
endSeq();
}
}

这里有一个非常简单的循环:

var equal:Boolean=true
if(combo.length == truecombo.length) {
for(var i:int=0; i<combo.length; i++) {
if(combo[i] != truecombo[i]) {
equal=false;
break;
}
}
} else {
equal=false;
}
if(equal) {
//do whatever
}

这是假设两者相等,直到我们发现其他情况。因此,如果长度不同,它们就不相等。如果第i个元素不同,则它们不相等。

最后,你检查你的标志equal是否为真,然后做你想做的任何事情

相关内容

  • 没有找到相关文章