2013-03-13 61 views
2

我正在處理這個問題。我有24個影片剪輯(稱爲mc1,mc2,..,mc24),它們以某種格子(6x4)放置在舞臺上。我需要一個函數,它切換這些影片剪輯的位置(類似於隨機播放,但是具有其他影片剪輯的已知位置)。例如mc1.x和mc1.y將等於mc4.x和mc4.y等。非常感謝您的時間和想法!彼此切換動畫片段位置[AS3]

回答

0

你的意思是這樣的:

function swap(mcA:MovieClip, mcB:MovieClip):void 
{ 
    var tempPosition:Point = new Point(mcA.x, mcA.y); 
    mcA.x = mcB.x; 
    mcA.y = mcB.y; 

    mcB.x = tempPosition.x; 
    mcB.y = tempPosition.y; 
} 
swap(mc1, mc4); 

這將交換的mc1mc4的位置。

var totalItems:int = 24; // total number of items 
for(var i:int = 0; i < int(totalItems/2); i++) 
{ 
    var randomItem:String = "mc"+(int(Math.random() * (int(totalItems/2)-1)) + (int(totalItems/2)+1)); 
    swap(this["mc"+(i+1)], this[randomItem]); 
} 

這將通過項目的前半部分,並將它們與項目的後半部分中的隨機項交換。

+0

是的,但我需要交換超過2個動畫片段的位置,在所有24個最好的情況下,像pexeso遊戲 - 目標是,當我運行應用程序時,movieclip不能每次都在同一個地方,他們必須每次交換位置 – tomiteko 2013-03-13 17:57:00

+0

好的,我更新了代碼,告訴你如何洗牌整個板子。基本上,它將棋盤上半部分的每個物品換成棋盤後半部分的隨機物品。 另一種方法是將所有的MovieClip放入'Array'中,使用array.sort(function(a:Object,b:Object):int {return Math.random()>對其進行混洗。 5?-1:1})'然後按順序分配它們的'x'和'y'值。 – Marcela 2013-03-13 18:17:53

+0

非常感謝,我會盡快嘗試,讓你知道它是如何工作的 – tomiteko 2013-03-13 18:50:07

1

使用XOR交換。它基本上是這樣的:

mc1.x ^= mc4.x; 
mc4.x ^= mc1.x; 
mc1.x ^= mc4.x; 

mc1.y ^= mc4.y; 
mc4.y ^= mc1.y; 
mc1.y ^= mc4.y; 

然後從那裏開始。