如何确定动态影片剪辑的宽度?

时间:2012-10-24 20:41:06

标签: flash math actionscript-2 flash-cs5 flash-cs4

我正在尝试菊花链复制的动画片段,我无法弄清楚如何让每个人相互对接。我正在为铁路教练建立培训援助,而这部分援助是指导员可以动态建造火车。

总共有五个物体,机车,料斗,flat_car,tank_car和box_car。当教练点击其中一辆汽车时,会在舞台上创建副本,教师可以在舞台上拖放该副本。如果他/她点击另一辆车同样的事情发生,但如果其中一个副本被丢弃在另一辆车的顶部,火车大楼将开始。新车会突然移动到目标的右侧,如果另一辆车掉落,它会向右移动,依此类推,但是当我遇到麻烦的时候,当我添加第三辆车时,它只会在一半的位置上滑动。

注册点对我来说是搞乱的,它是中心,所以我需要弄清楚目标的半宽和被丢弃的汽车的一半宽度,这将给我这个车的意义点抓住。例如:

目标车辆是50并且车辆下降是50然后应该是25 + 25的点。如果第三辆车掉落,那么现在被链接在一起的两辆车是100并且车辆被丢弃的是50,新的下降点应为75。

这些车的尺寸各不相同,这使得这很难,我希望它们都是相同尺寸的:(以下是我使用的代码,也许它有助于说明我在说什么约:

var _carArray:Array = ["locomotive","tank_car","box_car","hopper","flat_car"];

/*** 
* the function below is called when a duplicated
* object is dropped on a another duplicated object
* I could add that code, but I figured it wasn't 
* needed since my math is what I'm struggling with
***/

function BuildTrain(_mc,_instanceName):Void
{
    var _tar        = eval(_mc._droptarget);
    var _carHalf    = (_mc._width) / 2;
    var _targetHalf = (_tar._width) / 2;
    var _math       = _targetHalf + _carHalf;
    for(var _i in _carArray)
    {
        if(instanceName == _carArray[_i])
        {
            _tar.attachMovie(_instanceName,_instanceName,200+_count,{_x:_math});
        }
        _p.removeMovieClip();
    }
}

注意:我将此标记为数学,因为它确实需要数学来解决这个问题。

1 个答案:

答案 0 :(得分:1)

创建另一个数组来保存当前的火车。

var myTrain = [];

每当您想要将新车拍入混音时,请将其添加到myTrain数组中。然后遍历myTrain数组并按顺序重新定位所有内容。

function BuildTrain(_mc,_instanceName):Void
{
    var _tar        = eval(_mc._droptarget);
    var _carHalf    = (_mc._width) / 2;
    var _targetHalf = (_tar._width) / 2;
    var _math       = _targetHalf + _carHalf;
    for(var _i in _carArray)
    {
        if(instanceName == _carArray[_i])
        {
            myTrain.push(_tar.attachMovie(_instanceName,_instanceName,200+_count,{_x:_math})); //put the newly created car in the mytrain array;
            redrawTrain();
        }
        _p.removeMovieClip();
    }
}

function redrawTrain(){
    var curX = 0;
    for(var i = 0;i < myTrain.length; i++){
        myTrain[i]._x = curX + (myTrain[i]._width * .5); //offset by half the car width since it's anchored in the center
        curX += myTrain[i]._width;
    }
}
相关问题