我会尽力解释我的问题,也许我的方法甚至不是这样做的方法,但这里是:
我的任务是重建一个培训辅助设备,让铁路教练可以使用假铁路并根据讨论构建场景。教练从一个只有轨道的铁路场开始,没有汽车或机车。这是一个屏幕截图:
讲师将在该地图下方有几个对象,他/她可以将这些对象拖放到铁路场上以说明场景,这是屏幕截图:
这些对象在我的库中,当 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});
}
}
}