在数组中重新堆叠MovieClip

时间:2011-05-13 06:55:52

标签: actionscript-3 multidimensional-array stack movieclip

我试图用游戏SameGame做类似的事情(即被移除的块上方的块向下掉落)。在使用包含MovieClip的Array尝试此操作之前,此代码有效(尝试使用int值)。使用数组上的MovieClip,它似乎没有相同的工作方式。

使用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

但是使用MovieClips:

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

基本上,它剥离了其他所有内容,而不仅仅是所述块> _<

这是整个方法。基本上,两个额外的数组将值放在即将删除的值之上,删除该值,然后将其重新堆叠到原始数组中。

这可能有什么问题?我是否正在为我真正想要效仿的事情做正确的事情?

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:如果问的不是太多,那么在AS3中制作SameGame是否有免费的分步指南(我担心我可能做得不对)?在此先感谢=)

1 个答案:

答案 0 :(得分:0)

我认为你只想删除一个元素并在该索引之后移动所有内容以填充你删除的内容。这个名为splice(start:uint, length:uint);

的内置函数

参数:
开始 - 开始从中删除元素的索引 长度 - 要移除的元素数量

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

ar.splice(1, 1);

现在是 - > [“你好”,“先生”];


根据问题:

以下是不同类型元素的示例:

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