【问题标题】:How to determine width of dynamic movie clip?如何确定动态影片剪辑的宽度?
【发布时间】:2012-10-24 20:41:06
【问题描述】:

我正在尝试以菊花链方式连接复制的影片剪辑,但我不知道如何让每个剪辑相互对接。我正在为铁路教官构建一个培训辅助工具,其中一部分是教官可以动态地构建火车。

总共有五个对象,机车、漏斗、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();
    }
}

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

【问题讨论】:

  • 您使用 as2 有什么原因吗?

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


【解决方案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;
    }
}

【讨论】:

    猜你喜欢
    • 2011-01-19
    • 2015-06-28
    • 1970-01-01
    • 2013-12-22
    • 2017-08-23
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多