[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;
}
答
这是许多可能的解决方案之一。它破坏了初始数组。如果您不想更改初始数组,其余部分取决于您实际想要实现的内容。
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;
}
你的问题是,当你点击随机返回影片剪辑已经有阿尔法1,所以你必须点击,直到发现一个影片剪辑具有阿尔法= 0 – mgraph 2012-03-22 11:23:05
可你至少响应 – mgraph 2012-03-22 11:39:01
对不起,还尝试了脚本。 我有点想法如何实现我想要的。 但@Nox Noctis的回答也很好!多谢你们!!! – pizza0502 2012-03-22 11:56:41