[AS3] Случайно сделать что-то без повторения - PullRequest
0 голосов
/ 22 марта 2012

У меня есть 3 мувиклипа на сцене: mc1, mc2, mc3 сначала они альфа = 0

То, что я хочу, - это когда я нажимаю накарточное меню, 1 из них будет отображаться как альфа = 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;
}

Ответы [ 2 ]

1 голос
/ 22 марта 2012

Вот одно из многих возможных решений. Это разрушает исходный массив, хотя. Если вы не хотите изменять исходный массив, все остальное зависит от того, чего вы на самом деле хотите достичь.

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;
}
0 голосов
/ 22 марта 2012

Создайте второй массив для использования в качестве источника выбора. Каждый раз, когда вы выбираете элемент, Splice из второго массива. Кроме того, так как все ваши элементы - MovieClips, вы должны использовать 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; 
} 
...