заставить объект двигаться прямо к точке и остановиться, когда он достигнет - PullRequest
0 голосов
/ 04 марта 2012

Как я могу остановить мой объект, когда он достигнет пункта назначения, который я дал ему щелчком мыши? Код заставляет объект двигаться к точке щелчка мыши, но я не могу понять, как заставить его остановиться, потому что он почти никогда не пройдет определенную точку назначения. : / Кто-нибудь, кто знает, как этого добиться?

public function onMouseDown(evt:MouseEvent)
    {
        if (this._character != null)
        {
            _character.isMoving = false;
            _character.dx = 0;
            _character.dy = 0;
            targetX = mouseX - _character.x;
            targetY = mouseY - _character.y;
            var angle:Number = Math.atan2(targetY,targetX);
            var dx:Number = Math.cos(angle) * _character.speed;
            var dy:Number = Math.sin(angle) * _character.speed;
            _character.dx = dx;
            _character.dy = dy;
            _character.isMoving = true;
        }

    }
    public function updateCharacter(e:Event):void
    {
        if (this._character.isMoving)
        {
            this._character.x +=  this._character.dx;
            this._character.y +=  this._character.dy;

        }
    }

Ответы [ 3 ]

2 голосов
/ 04 марта 2012

Самый простой способ сделать это - рассчитать угол к точке, которую вы хотите остановить при каждом перемещении. Это значение должно оставаться неизменным, если вы двигаетесь по прямой линии, пока не пройдете точку, в которой пытаетесь остановиться, и в этот момент она резко изменится.

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


Я создал демо с исходным кодом для вас. Существует довольно много кода, поэтому вместо того, чтобы публиковать здесь все, вы можете вместо этого загрузить исходный код:

http://martywallace.com/testing/gotoPoint.zip

1 голос
/ 06 января 2013

Попробуйте это

package 
{
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.MouseEvent;

    public class Guest extends MovieClip
    {
        var walkSpeed:Number = 5;
        var oldPosX;
        var oldPosY;

        public function Guest()
        {
            stage.addEventListener(MouseEvent.CLICK, walk);
        }

        function walk(event:MouseEvent):void
        {
            oldPosX = parent.mouseX;
            oldPosY = parent.mouseY;
            rotation = Math.atan2(oldPosY - y,oldPosX - x) / Math.PI * 180;
            addEventListener(Event.ENTER_FRAME, loop);
        }

        function loop(event:Event):void
        {
            // see if you're near the target
            var dx:Number = oldPosX - x;
            var dy:Number = oldPosY - y;
            var distance:Number = Math.sqrt((dx*dx)+(dy*dy));
            if (distance<walkSpeed)
            {
                // if you are near the target, snap to it
                x = oldPosX;
                y = oldPosY;
                removeEventListener(Event.ENTER_FRAME, loop);
            }
            else
            {
                x = x+Math.cos(rotation/180*Math.PI)*walkSpeed;
                y = y+Math.sin(rotation/180*Math.PI)*walkSpeed;
            }

        }
    }
}
1 голос
/ 05 марта 2012

Подобные вопросы задавались много раз.

Однако, посмотрите код в моем ответе здесь, который должен объяснить, как двигаться и останавливаться.

Движение объектов в симуляции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...