[AS3]随机做一些不重复

问题描述:

我有3影片剪辑在舞台上是MC1,MC2, 起初他们是α= 0[AS3]随机做一些不重复

我想是当我点击revealBtn,其中1将显示为alpha = 1。

但是用我的代码下面,有时我需要点击5次左右或更多,才能让所有这些mc显示出来。

有什么我想要的解决方案吗?我尝试拼接,但它仍然不能正常工作。

var mcArray:Array = [mc1,mc2,mc3]; 
for (var j:int = 0; j < mcArray.length; j++) 
{ 
    mcArray[j].alpha = 0; 
} 

revealBtn.buttonMode = true; 
revealBtn.useHandCursor = false; 
revealBtn.addEventListener(MouseEvent.CLICK, revealClick); 

function revealClick(event:MouseEvent):void 
{ 
    var i:Number = Math.floor(Math.random() * mcArray.length); 
    var movieClipToEdit:MovieClip = mcArray[i] as MovieClip; 
    movieClipToEdit.alpha = 1; 
} 
+0

你的问题是,当你点击随机返回影片剪辑已经有阿尔法1,所以你必须点击,直到发现一个影片剪辑具有阿尔法= 0 – mgraph 2012-03-22 11:23:05

+0

可你至少响应 – mgraph 2012-03-22 11:39:01

+0

对不起,还尝试了脚本。 我有点想法如何实现我想要的。 但@Nox Noctis的回答也很好!多谢你们!!! – pizza0502 2012-03-22 11:56:41

这是许多可能的解决方案之一。它破坏了初始数组。如果您不想更改初始数组,其余部分取决于您实际想要实现的内容。

var invisibleList:Array = [mc1,mc2,mc3]; 
for (var j:int = 0; j < invisibleList.length; j++) 
{ 
    invisibleList[j].alpha = 0; 
} 

revealBtn.buttonMode = true; 
revealBtn.useHandCursor = false; 
revealBtn.addEventListener(MouseEvent.CLICK, revealClick); 

function revealClick(event:MouseEvent):void 
{ 

    if (invisibleList.length == 0) { 
     return; 
    } 
    var i:Number = Math.floor(Math.random() * invisibleList.length);  
    var movieClipToEdit:MovieClip = invisibleList[i] as MovieClip; 
    invisibleList.splice(i, 1); 
    movieClipToEdit.alpha = 1; 
} 

制作第二个阵列作为您的选择源。每次你选择一个项目时,Splice它来自第二个阵列。此外,由于您的所有项目都是影片剪辑,因此您应该使用Vector

var mcVector:Vector.<MovieClip> = [mc1,mc2,mc3]; 
var vector2:Vector.<MovieClip> = mcVector.Slice(0); // This just copies the Vector 
for (var j:int = 0; j < mcVector.length; j++) 
{ 
    mcVector[j].alpha = 0; 
} 

revealBtn.buttonMode = true; 
revealBtn.useHandCursor = false; 
revealBtn.addEventListener(MouseEvent.CLICK, revealClick); 

function revealClick(event:MouseEvent):void 
{ 
    var i:Number = Math.floor(Math.random() * mcVector.length); 

    // Retrieves and deletes the item in one step: 
    var movieClipToEdit:MovieClip = vector2.Splice(i, 1); 
    movieClipToEdit.alpha = 1; 
}