2012-12-07 6 views
0

У меня есть два массива, а именно комбо и truecombo. Пользователь заполняет комбо с помощью MovieClips, нажимая на различные кнопки на сцене, truecombo - правильная комбинация.Как сравнить 2 массива?

В любой заданной точке (enterFrame) Flash проверяет, совпадают ли эти два, если да, то делайте некоторые вещи. Пока это мой код (несколько раз измененный, например, с указанием индексов индексов, добавлением в конце комбо [o] и т. Д. 2 вещи будут происходить, либо один, либо другой.

Либо заявление не будет удовлетворен, после чего добавление и измельчение комбинированного массива будет продолжаться или условие будет немедленно выполнено, когда combo.length = 6. Проверьте мой код.

UPDATE: У меня есть файл с удаленным файлом с мой текущий код. Нажмите на это для FLA link и здесь SWF link убирается, как всегда, для удобства и безопасности.

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

Извините за недостаток комментариев, я думаю, это довольно понятно. Заранее спасибо.

ответ

0

Я считаю combo[o] & truecombo[o] два экземпляра одного и того же класса & вы хотите, чтобы они были согласованы. Если это так, вы можете рассмотреть следующие вопросы:

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

Чтобы соответствовать, как вы делали, вы должны убедиться, что объекты, лежащие внутри truecombo иметь в виду те же самые, на сцене & не новые экземпляры.


EDIT:

Кажется, вы не разорвать петлю, когда матч удался. Используйте вместо этого:

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(); 
     } 
} 
+0

Я сначала объявляю свои вары, используя «var fireb: firebtn = new firebtn();' (например), а затем заполняю их truecombo ими ... а затем, когда пользователь нажимает на символ на экране, я использую ' addChild (fireb) '... поэтому я бы предположил, что это те же самые экземпляры. – mechanicarts

+0

Пожалуйста, см. Мои правки, возможно, это проблема. – loxxy

+0

Это возвращает значение true, даже не нажимая ни на одну из кнопок. Проверьте мой оригинальный пост. – mechanicarts

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 th отличается, они не равны.

В конце вы проверяете, является ли ваш флаг equal истинным и выполняет все, что вы хотите.

+0

Не работает.Я добавил некоторую информацию в свой первоначальный вопрос. – mechanicarts

Смежные вопросы