AS3:如何构造此Array问题?

时间:2011-09-21 01:45:58

标签: actionscript-3

我想用AS3做这样的事情,但我是AS3的新手,我不知道如何进行编码。

我想要做的是阵列中有4个MC,每次点击一个MC时我需要它们移动一个MC。我需要他们循环。

所以我需要这样的东西: 如果点击#1 - 4,1,2,3 如果点击#2 - 1,2,3,4 如果点击#3 - 2,3,4,1 如果点击#4 - 3,4,1,2

我怎样才能在数组中执行此操作?我似乎无法绕过它。

2 个答案:

答案 0 :(得分:1)

如果要旋转数组,可以使用shift()/ push()或pop()/ unshift()的组合,具体取决于您想要旋转的方向。在你的情况下,移位/推动将会这样做。

这个基本代码说明了如何做到这一点:

var mc1:MovieClip,mc2:MovieClip,mc3:MovieClip,mc4:MovieClip;

var mcs:Array = [mc1, mc2, mc3, mc4];

function rotateArray(els:Array):MovieClip
{
    var el:MovieClip = els.shift();

    els.push(el);

    return el;

}

var nextEl:MovieClip = rotateArray(mcs);

显然,您还需要初始化并将点击处理程序附加到影片剪辑,此处mc1,mc2等仅用于说明。

检查AS3 Array docs有关班次,推,弹等的信息

向左旋转: shift()将拉出数组的第一个元素并返回它(同时从数组中删除它) push()会将它放回到数组的末尾

向右旋转: pop()将拉出数组的最后一个元素并返回它(也将其从数组中删除) unshift()会将它放回数组的开头。

答案 1 :(得分:1)

以下是执行所要求的代码。
关键部分是 movieclips.push(movieclips.shift());

movieclips.shift()从数组中删除第一个元素 movieclips.push()将元素添加到数组的末尾 还可以查看数组的pop和unshift函数。

package
{
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.MouseEvent;

    public var mc1:MovieClip = new MovieClip();
    public var mc2:MovieClip = new MovieClip();
    public var mc3:MovieClip = new MovieClip();
    public var mc4:MovieClip = new MovieClip();

    public var movieclips:Array = new Array(mc4,mc1,mc2,mc3);

    public class Demo extends MovieClip
    {
        public function Demo()
        {
            addEventListener(Event.ADDED_TO_STAGE, init);
        }

        public function init():void
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            addChild(mc1);
            addChild(mc2);
            addChild(mc3);
            addChild(mc4);
            mc1.addEventListener(MouseEvent.CLICK, click);
            mc2.addEventListener(MouseEvent.CLICK, click);
            mc3.addEventListener(MouseEvent.CLICK, click);
            mc4.addEventListener(MouseEvent.CLICK, click);
            // Left as exercise: Place and position mc shape, image or bitmap
        }

        public function click(e:MouseEvent):void
        {
            movieclips.push(movieclips.shift());
        }
    }
}