1

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

在任何给定点(enterFrame),Flash 都会检查两者是否相同,如果是,则执行一些操作。暂时这是我的代码(更改了几次,例如对索引进行类型转换,在 combo[o] 末尾添加 .parent 等。两件事会发生,其中之一。

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

更新:我有一个包含当前代码的保管箱文件。单击此获取 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;
    }
}

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

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];

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

4

2 回答 2

0

这是一个非常简单的循环:

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是否为真,然后做任何你想做的事情。

于 2012-12-08T04:49:27.440 回答
0

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

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

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


编辑:

当匹配成功时,您似乎没有中断循环。改用这个:

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();
      }
}
于 2012-12-07T02:54:31.313 回答