2011-11-02 85 views
-2

我试图创建可移动的实例,这是可拖动的,并且有一条连接它们的线路,它们会自动更新。从一个实例到另一个实例不工作行为脚本3.0

问题是:原始行随机出现,并且在实例(mc1,mc2)被拖动时不会更新。 这是到目前为止,我已经得到了代码:

mc1.addEventListener(MouseEvent.MOUSE_DOWN, function (e:MouseEvent):void 
{ 
    e.currentTarget.startDrag(); 
}); 

mc1.addEventListener(MouseEvent.MOUSE_UP, function (e:MouseEvent):void 
{ 
    e.currentTarget.stopDrag(); 
}); 
mc2.addEventListener(MouseEvent.MOUSE_DOWN, function (e:MouseEvent):void 
{ 
    e.currentTarget.startDrag(); 
}); 

mc2.addEventListener(MouseEvent.MOUSE_UP, function (e:MouseEvent):void 
{ 
    e.currentTarget.stopDrag(); 
}); 

var mc:MovieClip = new MovieClip(); 
mc.graphics.beginFill(0x000000); 
mc.graphics.lineStyle(2,0x000000); 

//start drawing the line 
mc.graphics.moveTo(mc1.x,mc1.y); 
mc.graphics.lineTo(mc2.x,mc2.y); 
mc.graphics.endFill(); 

//Position your new movie clip 
addChild(mc); 

谁能告诉我去哪里我听错了?

非常感谢您的帮助!

回答

0

你需要做的是捕捉用户鼠标的移动,因为他正在拖动MovieClip。

首先创建一个isDragging变量var isDragging:Boolean = false;,并在鼠标向下时将其设置为true,并在鼠标向上时将其设置为false。

接着一个的MouseEvent.MOUSE_MOVE事件监听器添加到行时间轴

addEventListener(MouseEvent.MOUSE_MOVE, function (e:MouseEvent):void 
{ 
    if (isDragging) { 
     drawConnectiveLine(mc1, mc2); 
    } 
    return; 
}); 

方法drawConnectiveLine将更新线矢量形状移动到的movieclip的{X,Y}。

function drawConnectiveLine(d:DisplayObject, d2:DisplayObject):void { 
    mc.graphics.clear(); 
    mc.graphics.lineStyle(2,0); 
    mc.graphics.moveTo(d.x,d.y); 
    mc.graphics.lineTo(d2.x,d2.y); 
} 

修改您的预先存在的脚本:

var isDragging:Boolean = false; 
var mc:MovieClip = new MovieClip(); 
mc.graphics.lineStyle(2,0); 
mc.graphics.moveTo(mc1.x,mc1.y); 
mc.graphics.lineTo(mc2.x,mc2.y); 
addChild(mc); 

mc1.addEventListener(MouseEvent.MOUSE_DOWN, function (e:MouseEvent):void 
{ 
    isDragging = true; 
    e.currentTarget.startDrag(); 
}); 

mc1.addEventListener(MouseEvent.MOUSE_UP, function (e:MouseEvent):void 
{ 
    isDragging = false; 
    e.currentTarget.stopDrag(); 
}); 

mc2.addEventListener(MouseEvent.MOUSE_DOWN, function (e:MouseEvent):void 
{ 
    isDragging = true; 
    e.currentTarget.startDrag(); 
}); 
mc2.addEventListener(MouseEvent.MOUSE_UP, function (e:MouseEvent):void 
{ 
    isDragging = false; 
    e.currentTarget.stopDrag(); 
}); 
addEventListener(MouseEvent.MOUSE_MOVE, function (e:MouseEvent):void 
{ 
    if (isDragging) { 
     mc.graphics.clear(); 
     mc.graphics.lineStyle(2,0); 
     mc.graphics.moveTo(mc1.x,mc1.y); 
     mc.graphics.lineTo(mc2.x,mc2.y); 
    } 
}); 
+0

我应该将所有代码还是只是“修改现有代码”下的代码?因为每当我做他们任何一个时,我都会遇到很多问题。你能告诉我哪个代码放在哪里? –

+0

现在我所有的问题都是“访问未定义的属性mc”。我唯一拥有的代码是库对象“mc”和它的两个实例stage(mc1,mc2)。你知道为什么会这样吗?你有没有机会发布你制作的实际fla文件? –

+0

已更新,包含名为'mc'的新MovieClip –

0

以下的区块可能会对您有所帮助。

mc.graphics.clear(); 
//mc.graphics.beginFill(0x000000); //no need fills 
mc.graphics.lineStyle(2,0); 

//start drawing the line 
mc.graphics.moveTo(mc1.x,mc1.y); 
mc.graphics.lineTo(mc2.x,mc2.y); 
//mc.graphics.endFill(); //no need to end it. 
+0

怎么了自动更新? –

+0

,它仍然不会从一个实例转到另一个实例... –

相关问题