0

我会尽力解释我的问题,也许我的方法甚至不是这样做的方法,但这里是:

我的任务是重建一个培训辅助设备,让铁路教练可以使用假铁路并根据讨论构建场景。教练从一个只有轨道的铁路场开始,没有汽车或机车。这是一个屏幕截图:

在此处输入图像描述

讲师将在该地图下方有几个对象,他/她可以将这些对象拖放到铁路场上以说明场景,这是屏幕截图:

在此处输入图像描述

这些对象在我的库中,当 swf 首次运行时,一个对象被放置在舞台上。我已经创建了一个对象数组,它具有链接名称、x 和 y 坐标,这些坐标是我希望在附加对象时放置对象的位置。这是将项目放在舞台上的对象和循环:

总共有大约 50 项,但本例仅显示两项。

对象数组

var _objectArray = [{obj:{name:"detector",x:20,y:680}},{obj:{name:"locomotive",x:270,y:610}}];

附加电影循环

/* pulls objects from library and places on the stage */
for(var _i in _objectArray)
{
    var _name = String(_objectArray[_i].obj.name);
    var _xx   = _objectArray[_i].obj.x;
    var _yy   = _objectArray[_i].obj.y;
    this.attachMovie(_name,_name,this.getNextHighestDepth(),{_x:_xx,_y:_yy});
    this[_name].onRelease = function()
    {
        Clone(this);
    }
}

当教师开始构建场景时,他/她将单击对象,并将该对象的副本放置在对象区域之外的舞台上。然后他/她可以将该副本拖放到舞台上的任何位置。在 for 循环中你可以看到我调用了这个Clone()函数,这里是:

克隆功能

var _number:Number = 0;
var _cloneArray:Array = [];
function Clone(_mc):Void
{
    var _clone = String("clone" + _number);//used to make unique clone names
    _cloneArray.push(_clone);//build array so I can remove objects from stage

    /* duplicate objects */
    _mc.duplicateMovieClip(_clone,100+_number,{y:580,_x:Stage.width/2});

    /* set press event */
    this[_clone].onPress = function()
    {
        this.swapDepths(10000);//bring to the top
        this.startDrag(false,0,0,1024,580);//drag to constraints
    }

    /* set release event */
    this[_clone].onRelease = function()
    {
        this.stopDrag();
        if(_mc._name == "loco" || _mc._name == "car")
        {
            BuildTrain(this);
        }
    }
}

所有这一切都很好,但我遇到问题的地方是当教练想要“建造”一列火车时。所以我的意思是,指导员将一个机车放在舞台上,然后将一辆油罐车放在舞台上,指导员将油罐车拖到机车顶部,油罐车会在它后面卡住机车内联。当这种情况发生时,如果教官想把它拖到某个地方,油罐车现在将跟随机车。所以现在好像只有一个单元。这位教官可能想要机车后面有 20 节车厢……而且他可能想要建造不止一列火车。这是一个机车和汽车“啪”在一起的截图:

在此处输入图像描述

下面是一些代码,可以让我将汽车拼接在一起,效果很好,但我的问题是在所有汽车都被捕捉后,我无法将对象作为一个单元拖动:

构建火车

function BuildTrain():Void
{
    for(var _i in _consistArray)
    {
        var _value = _consistArray[_i];
        var _math  = _mc.width + this[_value]._width;
        var _space = 1; // this is the space between cars
        if(eval(_mc._droptarget)._name === _value)
        {
            _mc._x = this[_value]._x + _math / 2 + _space;
            _mc._y = this[_value]._y;
        }
    }
}

Clone()如果您想建造一列长火车,也可以将一辆车扣到机车上,然后将车扣到车上。问题出在哪里,我无法弄清楚如何在它们被折断后将它们制成一个单元。我考虑过使用父子关系构建一个数组,但我不确定。

我知道这是一篇很长的帖子,但希望一些背景知识有所帮助。

更新

我正在玩弄艾米在下面的想法,因为居住在父母内部的孩子只会跟随父母似乎是合乎逻辑的。我设法生了一个孩子——这还不够,我需要更多的陪伴——但我认为这是正确的道路。我想在最后一辆车上附加一辆车?这是我正在使用的代码:

function BuildTrain(_mc):Void
{   
    for(var _i in _consistArray)
    {       
        var _value = _consistArray[_i];
        var _math  = _mc._width + this[_value]._width;
        var _space = 2; // gap between cars
        if(eval(_mc._droptarget)._name == _value)
        {           
            this[_value].attachMovie("tank_car","consist"+_i,this.getNextHighestDepth(),{_x:_math / 2 + _space});           
        }
    }
}
4

0 回答 0