Actionscript - после того, как я выполняю removechild () и добавляю addChild (), MC продолжает двигаться - PullRequest
0 голосов
/ 30 марта 2011

У меня есть MC, который мышь может перетаскивать и скользить, когда ее удаляют со сцены, когда она попадает за пределы объекта. Я снова добавляю его на сцену в положении x, y, с которого он изначально был запущен, но когда я добавляю его, он продолжает скользить в направлении, в котором он шел, до того, как был удален.

function __checkHit ($ evt: Event): void {

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
{
} 

EDIT:

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;
}

Ответы [ 2 ]

0 голосов
/ 30 марта 2011

Ну, я думаю, что вам нужно только повторно инициализировать ваши переменные (скорость, направление ...), когда вы вызываете stopDrag.

0 голосов
/ 30 марта 2011

Из того, что я могу сказать в вашем коде, похоже, что скорость не сбрасывается до 0, когда объект повторно добавляется на сцену. Удаление со сцены не меняет никаких свойств, поэтому при удалении и повторном добавлении все равно имеет те же значения скорости.

...