Перегруппировка мувиклипов в массиве - PullRequest
0 голосов
/ 13 мая 2011

Я пытался сделать аналогичное с игрой SameGame (т.е. блок над удаленными блоками падает вниз). Перед попыткой этого с массивом, содержащим MovieClips, этот код работал (пробовал с значениями int). С MovieClips в массиве, кажется, не работает так же.

со значениями типа int, например:

popUp(0, 4): Before: 1,2,3,4,5,6,7,8,9,10; After: 1,2,3,4,6,7,8,9,10

Но с мувиклипами:

popUp(0, 4): Before: 1,2,3,4,5,6,7,8,9,10; After; 1,2,3,4
// Assume the numbers are movieclips XD

По сути, он удаляет все остальное, а не только указанный блок> _ <</p>

Вот весь метод. По сути, два дополнительных массива перемещают значения над значением, которое скоро будет удалено, удаляют значение, а затем повторно складывают его в исходный массив.

Что может быть не так с этим? И правильно ли я делаю то, что я действительно хотел подражать?

function popUp(col:uint, row:uint)
    {
        var tempStack:Array = new Array();
        var extraStack:Array = new Array();
        tempStack = IndexArray[col];
        removeChild(tempStack[0]);
        for(var ctr:uint = tempStack.length-(row+1); ctr > 0; ctr--)
        {
            removeChild(tempStack[ctr]);
            extraStack.push(tempStack.pop());
            trace(extraStack);
        }

        tempStack.pop();

        for(ctr = extraStack.length; ctr > 0; ctr--)
        {
            tempStack.push(extraStack.pop());
            //addChild(tempStack[ctr]);
        }

        IndexArray[col] = tempStack;
    }

PS: Если спросить не так уж и много, есть ли бесплатные пошаговые инструкции по созданию SameGame в AS3 (боюсь, что я не все делаю правильно)? Заранее спасибо =)

1 Ответ

0 голосов
/ 13 мая 2011

Я думаю, что вы просто хотите удалить элемент, и после этого индекса все должно сместиться вниз, чтобы заполнить то, что вы удалили.Для этого есть встроенная функция с именем splice(start:uint, length:uint);

Параметры: start - индекс для начала удаления элементов из length - количество элементов для удаления

var ar:Array = ["hello","there","sir"];

ar.splice(1, 1);

ar is now -> ["hello", "sir"];


По вопросу:

Вот пример с различными типами элементов:

var ar:Array = [new MovieClip(), "some string", new Sprite(), 8];
ar.splice(2, 1);

trace(ar); // [object MovieClip], some string, 8

И еще пример для отображения изменяемых индексов:

trace(ar[2]); // was [object Sprite], is now 8
...