2011-03-30 54 views
0

我有一个MC,鼠标可以拖动和滑动,当它从舞台上移开时,它碰到超出边界的对象。我将它添加到最初开始的x,y位置的舞台上,但是当我重新添加它时,它会继续沿着它在去除之前的方向滑动。Actionscript - 在我执行removeChild()并重新添加addChild()后,MC继续移动

功能__checkHit($ EVT:事件):无效{

if (this.test_object.hitTestObject(bounds1)) 
{ 
    // do our in-circle check 
     stopDrag(); 
     removeChild(test_object); 
test_object.x = 437.25; 
test_object.y = 808.3; 
addChild(test_object); 
} 
else 
{ 
} 

编辑:

var props:Dictionary=new Dictionary(); 
var currItem:Sprite; 
var mass=5; 
var friction=0.9; 
var drag=false; 
... 
function onMovement(e:Event):void { 
    var instanceX=e.currentTarget.x; 
    var instanceY=e.currentTarget.y; 
    var instanceR=e.currentTarget.rotation; 

    if (props[e.currentTarget].drag==false) { 
     instanceX+=props[e.currentTarget].vX; 
     instanceY+=props[e.currentTarget].vY; 
    } else { 
     // Set Current Mouse Position 
     var mx=stage.mouseX; 
     var my=stage.mouseY; 

     //Calculate Distance Traveled 
     var dmx=mx-props[e.currentTarget].mx0; 
     var dmy=my-props[e.currentTarget].my0; 

     // Set Previous Mouse Position 
     props[e.currentTarget].mx0=mx; 
     props[e.currentTarget].my0=my; 

     // Calculate Force 
     var fx = (dmx - props[e.currentTarget].vX) * mass; 
     var fy = (dmy - props[e.currentTarget].vY) * mass; 

     // Calculate Offset Between Mouse and Registration Point 
     var ax=mx-instanceX; 
     var ay=my-instanceY; 

     // Calculate Rotation from Offset 
     var t=fx*ay-fy*ax; 

     //Set Velocity = To Distance 
     props[e.currentTarget].vX=dmx; 
     props[e.currentTarget].vY=dmy; 

     // Set Rotation Angle 
     props[e.currentTarget].vR+=t*.005; 

     // Set Instance = Instance + Velocity 
     instanceX+=props[e.currentTarget].vX; 
     instanceY+=props[e.currentTarget].vY; 

     // 
     var dx=mx-instanceX; 
     var dy=my-instanceY; 

     // Convert Degrees to Radians 
     var cos=Math.cos(props[e.currentTarget].vR*Math.PI/180); 
     var sin=Math.sin(props[e.currentTarget].vR*Math.PI/180); 

     // Calculate Offset Points After Rotation 
     var aax = dx - (cos * dx + sin * dy); 
     var aay = dy - (cos * dy - sin * dx); 

     // Set Instance Points after Rotation 
     instanceX+=aax; 
     instanceY+=aay; 
    } 

    instanceR-=props[e.currentTarget].vR; 

    // Bounce Off Edges 
    if (instanceX<0) { 
     props[e.currentTarget].vX*=-1; 
     instanceX=0; 
    } 
    if (instanceX>stage.stageWidth) { 
     props[e.currentTarget].vX*=-1; 
     instanceX=stage.stageWidth; 
    } 
    if (instanceY<0) { 
     props[e.currentTarget].vY*=-1; 
     instanceY=0; 
    } 
    if (instanceY>stage.stageHeight) { 
     props[e.currentTarget].vY*=-1; 
     instanceY=stage.stageHeight; 
    } 

    e.currentTarget.x=instanceX; 
    e.currentTarget.y=instanceY; 
    e.currentTarget.rotation=instanceR; 

    props[e.currentTarget].vX*=friction; 
    props[e.currentTarget].vY*=friction; 
    props[e.currentTarget].vR*=friction; 
} 
+0

定义方向/速度在哪里? – roberttdev 2011-03-30 12:44:25

+0

进行编辑。正如你可以看到他们没有公开定义 – RapsFan1981 2011-03-30 13:00:59

回答

0

从我可以在你的代码告诉,它看起来像速度不当对象重新添加到舞台时,重置为0。从舞台上移除并不会改变任何属性,因此当它被移除并重新添加时,它仍然具有相同的速度值。

+0

是否有我应该公开声明的变量,以便我可以重置它们的值?哪个? – RapsFan1981 2011-03-30 13:24:05

+0

它看起来像vX和vY存储速度,所以我会从这些开始。然而,您不必将它们公开 - 事实上,我会建议您创建一个公共函数,在删除完成所有需要的取消初始化的对象时调用它。 – roberttdev 2011-03-30 14:08:44

+0

啊,谢谢! – RapsFan1981 2011-03-30 15:20:25

0

嗯,我想你只需要重新初始化你的变量(速度,方向......),当你拨打stopDrag