我会尽力解释我的问题,也许我的方法甚至不是这样做的方法,但这里是:
我的任务是重建培训援助,这将使铁路教练能够使用假铁路并根据讨论建立场景。教练从一个只有轨道,没有汽车或机车的铁路车场开始。这是一个截图:
教师将在该地图下面有几个对象,他/她可以拖放到铁路场地以示例情景,这是一个截图:
对象在我的库中,当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辆汽车......他可能想要建造一辆以上的火车。这是机车和汽车“截图”在一起的屏幕截图:
这里有一些代码允许我将汽车一起拍摄,效果很好,但我的问题是在所有汽车被拍下后我无法将物体作为一个单位拖动:
BuildTrain
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()
如果你想搭建长列车的话,会把一辆车撞到机车上,然后开到车上。问题出在哪里我无法弄清楚如何在它们被扯之后使它们成为一个单元。我想过可能使用父子关系构建数组,但我不确定。
我知道这是一个很长的帖子,但有些背景有希望得到帮助。
更新
我正在玩Amy在下面的想法,因为居住在父母身边的孩子似乎是合乎逻辑的。我设法让一个孩子 - 这还不够,我需要能够附加更多 - 但我认为这是正确的道路。我想把汽车挂在最后一辆车上吗?这是我正在使用的代码:
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});
}
}
}