Actionscript - случайное падение с движущейся плоскости MC - PullRequest
0 голосов
/ 04 мая 2011

Я не совсем знал, как описать мою проблему в теме. У меня есть самолет MC и ящик MC. Самолет летит только вдоль оси Y от нижней части экрана к верхней. По пути я хочу, чтобы он случайно опустил ящик MC. Мой код ниже. Проблема в том, что ящики спонтанно продолжают нереститься, а не рядом с самолетом.

function movePlane():void
{
    var tempY:Number;
    var tempX:Number;
    var tempCrate:MovieClip;
    var tempPlane:MovieClip;

    for (var j:int =planes.length-1; j>=0; j--)
    {
        tempPlane = planes[j];
        tempPlane.y +=  tempPlane.planeSpeed;
        tempCrate = new Crate();
        tempY = Math.floor(Math.random() * tempPlane.y);
        tempX = Math.floor(Math.random() * tempPlane.x);
    }
    tempCrate.y = tempY;
    tempCrate.x = tempX;

    addChild(tempCrate);
}

1 Ответ

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

Отредактированный ответ:

Чтобы создать ящик на каждой плоскости, как только вы сможете создать это поведение, создав таймер на каждой плоскости со случайным значением времени.Например:

function addRandomCreation():void{
    var animationTime:Number = 5000; //The time the planes will be animating in ms 

    for(var i:int = 0; i < planes.length; i++){
        var planeTimer:Timer = new Timer(Math.round(animationTime * Math.random()));
        planeTimer.addEventListener(TimerEvent.TIMER, timerComplete(i));
        planeTimer.start();
    }
}

function timerComplete(planeID:int):function{
    return function(event:TimerEvent):void{
        event.target.stop();
        event.target.removeEventListener(event.type, arguments.callee);

        var tempCrate:MovieClip = new Crate();
        tempY = Math.round(Math.random() * planes[planeID].y);
        tempCrate.y = tempY;
        tempCrate.x = planes[planeID].x;
        addChild(tempCrate);        
    }
}

Отредактированный ответ:

Это создаст ящик на той же оси х, что и плоскость, на которой он создается.

function movePlane():void
{
    var tempY:Number;
    var tempX:Number;
    var tempCrate:MovieClip;
    var tempPlane:MovieClip;

    for (var j:int =planes.length-1; j>=0; j--)
    {
        tempPlane = planes[j];
        tempPlane.y +=  tempPlane.planeSpeed;
        tempCrate = new Crate();
        tempY = Math.floor(Math.random() * tempPlane.y);
        tempCrate.y = tempY;
        tempCrate.x = tempPlane.x;
        addChild(tempCrate);
    }
}

Вы должны использовать addChild каждый раз, когда создаете новый ящик, в противном случае он просто создаст множество ящиков, из которых только последний будет добавлен на сцену.Для этого вам нужно переместить addChild в цикл.

function movePlane():void
{
    var tempY:Number;
    var tempX:Number;
    var tempCrate:MovieClip;
    var tempPlane:MovieClip;

    for (var j:int =planes.length-1; j>=0; j--)
    {
        tempPlane = planes[j];
        tempPlane.y +=  tempPlane.planeSpeed;
        tempCrate = new Crate();
        tempY = Math.floor(Math.random() * tempPlane.y);
        tempX = Math.floor(Math.random() * tempPlane.x);
        tempCrate.y = tempY;
        tempCrate.x = tempX;
        addChild(tempCrate);
    }
}
...