2013-03-13 30 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; 

然后从那里开始。