Перемещение видеоклипа в сторону мыши, но остановка короткая - PullRequest
1 голос
/ 24 июня 2011

Я экспериментирую с различными схемами управления для того, над чем я сейчас работаю, и в настоящее время я сделал это так, чтобы мувиклип мог следовать за моим курсором мыши. Моя проблема в том, что он приходит и садится прямо на точку курсора (как это «предполагается»). Я хотел бы иметь радиус около 10 пикселей вокруг курсора, в котором мувиклип остановился бы так, чтобы он двигался к курсору, но останавливался коротко. Единственный способ, которым я могу подумать, это сделать с обнаружением столкновений, но это выглядит как очень неуклюжий путь.

Вот мой код, который перемещает мувиклип в направлении мыши:

это выполняется на ENTER_FRAME

var dx:Number = stage.mouseX - this.x;
var dy:Number = stage.mouseY - this.y;
this._vx = Math.cos(Math.atan2(dy, dx)) * this._speed;
this._vy = Math.sin(Math.atan2(dy, dx)) * this._speed;
this.x += this._vx;
this.y += this._vy;

Ответы [ 2 ]

4 голосов
/ 24 июня 2011

Почему бы не использовать теорему Пифагора для проверки расстояния?

var a:Number = stage.mouseX - x;
var b:Number = stage.mouseY - y;

var dist:Number = Math.sqrt(a*a + b*b);
if(dist > 10)
{
    _vx = Math.cos(Math.atan2(b, a)) * _speed;
    _vy = Math.sin(Math.atan2(b, a)) * _speed;
    x += _vx;
    y += _vy;
}
0 голосов
/ 27 июня 2011

пакет {импорт com.Ball;импорт flash.display.Sprite;импорт flash.events.Event;

public class Main extends Sprite {
    private var bal:Ball;
    private var easing:Number=.3;

    public function Main():void {
        init();
    }
    private function init():void {
        bal=new Ball(8,Math.random() * 0xffffff);
        addChild(bal);
        addEventListener(Event.ENTER_FRAME,animAction);
    }
    private function animAction(e:Event):void {
        var dx:Number=mouseX - bal.x;
        var dy:Number=mouseY - bal.y;
        var ax:Number=dx * easing;
        var ay:Number=dy * easing;
        bal.x+= ax;
        bal.y+= ay;
    }
}

}

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