Actionscript - 从移动平面MC中随机掉落

时间:2011-05-03 21:35:01

标签: random actionscript positioning

我不太确定如何描述我在这个问题上的问题。我有一架飞机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 个答案:

答案 0 :(得分:1)

编辑回答:

如果您可以通过在每个平面上使用随机时间值创建计时器来创建此行为,则可以在每个平面上创建一个crate drop。像这样:

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);        
    }
}

编辑回答:

这将在与创建它的平面相同的x轴上创建一个板条箱。

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);
    }
}

每次创建新的Crate时都必须使用addChild,否则它只会创建大量的crate,只有最后一个才会被添加到舞台中。为此,您必须将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);
    }
}