2015-07-01 1 views
0

Эй, теперь все так были на этом некоторое время. Поэтому в основном я создаю игру, где объекты падают с вершины сцены, и как только игрок ловит один объект, я хочу, чтобы другие объекты могли складываться поверх первого объекта и продолжать идти и двигаться. Подобно тому, как вы складываете блоки друг на друга или что-то в этом роде.Как сделать видеоролики в массиве Стек поверх друг друга?

У меня есть массив, где я держу клип, который выпадает из верхней части сцены каждые промежутки секунд. Мувиклип называется acorn и вот как у меня есть его установки, где массив желудей находятся на стадии падения:

private function addAcorn():void 
    { 
     TweenLite.delayedCall(acornNumber, addAcorn); 
     var newAcorn = new mcAcorn; 
     addChild(newAcorn); 
     aAcornArray.push(newAcorn); 
    } 

в моем блоке Кадр прослушивателя событий У меня есть мой checkAcornHitSquirrel();

и здесь как я настройка функции:

private function checkAcornHitSquirrel():void 
    { 
     for (var i:int = 0; i < aAcornArray.length; i++) 
     { 
      var currentAcorn:mcAcorn = aAcornArray[i]; 


      if (currentAcorn.hitTestObject(squirrel)) 
      { 
       //Have Current Acorn Stack on Squirrel mouth and have mouth expand 
       acorn = currentAcorn; 
       currentAcorn.addEventListener(Event.ENTER_FRAME, trackAcorn); 

       //aAcornArray.splice(i, 1); 
       trace("SQUIRREL_ACORN_HIT_TEST"); 
      } 

     } 
    } 

у меня есть событие Enter кадров trackAcorn так, когда игрок перемещает желуди двигаться с игроком. Вот эта функция:

private function trackAcorn(e:Event):void 
    { 
     acorn.x = squirrel.x; 
     acorn.y = squirrel.y - 50; 
    } 

Так что моя основная идея, чтобы сделать это будет иметь двойной цикл вместо 1 для цикла. Но не уверен, что это будет лучший метод или как это сделать. Пожалуйста, если вы поймете, что я пытаюсь сделать, и могу помочь, я бы очень признателен.

Это то, что я пробовал, но только два желуди укладывают друг на друга другие проходят тщательный:/

private function checkAcornHitSquirrel():void 
    { 
     for (var i:int = 0; i < aAcornArray.length; i++) 
     { 
      var currentAcorn:mcAcorn = aAcornArray[i]; 

       for (var j:int = 0; j < aAcornArray.length; j++) 
       { 
       var stackAcorn:mcAcorn = aAcornArray[j]; 

       if (currentAcorn.hitTestObject(squirrel)) 
       { 
        //Have Current Acorn Stack on Squirrel mouth and have mouth expand 
        currentAcorn.x = squirrel.x; 
        currentAcorn.y = squirrel.y; 
        currentAcorn.stopAcorn(); 
        //aAcornArray.splice(i, 1); 
        trace("SQUIRREL_ACORN_HIT_TEST"); 
       } 

       if (currentAcorn.hitTestObject(stackAcorn) && currentAcorn.hitTestObject(squirrel)) 
       { 
        stackAcorn.x = currentAcorn.x; 
        stackAcorn.y = currentAcorn.y - 30; 
       } 
       } 

     } 
    } 
+0

Как вы могли бы уложить в белки рты так много желудей? – harilalkm

+0

Ха-ха. Если есть воля, есть способ. – Nathan

+0

Так много новичков не понимают, насколько важны и полезны DisplayObjectContainer. Создайте простой спрайт, добавьте его в свой squirel, а затем просто добавьте свой желудь в этот спрайт. Нет необходимости в enterframe, нет необходимости в вычислении или цикле. – BotMaster

ответ

1

Я думаю, ваша проблема в том, ссылка на acorn в trackAcorn. Эта переменная больше не ссылается на тот же желудок, что и при добавлении eventListener, потому что он изменяется на каждой итерации цикла for.

У вас может быть отдельный цикл, повторяющий все желуди, прикрепленные к белке. Вам просто понадобятся отдельные списки для прикрепленных и неприсоединенных желудей. Я думаю, это то, что вы подразумеваете под «double for loop»

Вы также можете создать новый класс Acorn, содержащий ссылку на MovieClip и логику его перемещения. Это было бы более объектно ориентированным и сделало бы его более очевидным, где желудок перемещается туда.

+0

Интересно. Итак, вы считаете, что отдельные для циклов будут делать трюк, а не один двойной цикл? Спасибо за информацию, которую я пытаюсь установить сегодня. – Nathan

+1

Если вам нужны желуди, чтобы взаимодействовать друг с другом, вам понадобится вложенный цикл. Для каждого желуди, итерации через все остальные и проверить на столкновение. Если желуди должны взаимодействовать только с белкой, то один цикл для проверки на столкновение и либо отдельный цикл, чтобы заставить их следовать за белкой, либо использовать функцию AddChild на DisplayObjectContainer, как предложено BotMaster. –

+0

Хорошо, я понимаю, что вы сейчас говорите. Да, я ищу только один желудок для обнаружения столкновения с белкой. После этого мне нужно, чтобы желуди обнаружили столкновение друг с другом и складывались друг на друга. Я определенно буду стараться изо всех сил. Еще один вопрос, я делаю это правильно. Я обновил свой вопрос внизу. Я показываю вложенный цикл. Не уверен, что это правильный путь для эффективного итерации всех желудей. – Nathan