2011-03-30 49 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

相關問題