2011-09-21 26 views
2

我想用AS3做這樣的事情,但我是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

我將如何能夠在數組中做到這一點?我似乎無法把我的頭纏住它。

回答

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上移,推,流行資訊等

要左轉明智: 移()將拉動數組的第一個元素,並將其返回(同時從取出陣列) 推()會把它在陣列結束

向右轉明智: pop()方法將拉動數組的最後一個元素,並返回它(也是從陣列中移除) unshift()會將它放回到b例如陣列。

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