Случайное удаление массива - PullRequest
1 голос
/ 09 мая 2011

только для записи, я использую AS3.

У меня есть проблема, в которой я хотел бы удалить спрайт случайным образом в AS3. Мне удалось выяснить, как создавать спрайты, чтобы они заполнялись как сетка, просто так, как я могу »не могу понять, как их удалить!

Вот код, который я использовал для их создания:

function showpixels() : void
{   

    for (var i:int = 0; i < 40; i++)
    {
        for (var j:int = 0; j < 40; j++)
        {
            var s:Sprite = new Sprite();
            s.graphics.beginFill(0);
            s.graphics.drawRect(i*10, j*10, 10, 10);
            s.graphics.endFill();
            addChild(s);
            pixels.push(s);
        }
    }
}

В основном мне нужно, чтобы они были удалены случайным образом, пока не будет видно то, что внизу.

Любая помощь будет хорошей, я довольно новичок в этом!Спасибо!

Ответы [ 2 ]

1 голос
/ 09 мая 2011

Идея Марти работает. Другой вариант - сначала перетасовать массив, а затем просто вытолкнуть элементы.

Для перетасовки Array используйте pixels.sort(function (...args):int { return int(2*Math.random()-1) }).

И тогда вы можете просто удалить их следующим образом:

function remove():void {
     if (pixels.length) removeChild(pixels.pop());
     else clearInterval(this.id);
}

И добавить эту строку в конце showpixels:

this.id = setInterval(remove, 500);
1 голос
/ 09 мая 2011
function removeRandom():void
{
    var rand:uint = Math.random()*pixels.length;

    var i:Sprite = Sprite(pixels[rand]);

    if(i.parent) i.parent.removeChild(i);
    pixels.splice(rand, 1);
}

ОБНОВЛЕНИЕ: для удаления через произвольные интервалы вы можете попробовать что-то вроде этого:

var _timer:int = 100;

addEventListener(Event.ENTER_FRAME, _handle);
function _handle(e:Event):void
{
    if(pixels.length > 0) _timer --;
    if(_timer < 1)
    {
        _timer = 10 + Math.random()*50;
        removeRandom();
    }
}

function removeRandom():void
{
    var rand:uint = Math.random()*pixels.length;

    var i:Sprite = Sprite(pixels[rand]);

    if(i.parent) i.parent.removeChild(i);
    pixels.splice(rand, 1);
}
...