В AS3 объект перетаскивается и при отпускании проявляет инерцию - PullRequest
0 голосов
/ 03 июля 2010

Я пытаюсь сделать следующее в AS3.У меня есть объект, который я хотел бы вести себя следующим образом:

  1. Когда вы щелкаете мышью и перетаскиваете ее, она перетаскивается вдоль, ограничивается осью х (только слева и справа).

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

  3. Объект не реагирует или никак не следует за не нажатой мышью;все, что он делает, останавливается, когда мышь отпущена, как описано выше.

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

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 03 июля 2010

Я нашел бесплатное онлайн-руководство, в котором есть ответ. Я возился с кодом. У автора даже есть файлы .fla для скачивания.

http://www.quasiuseful.com/?id=11

0 голосов
/ 03 июля 2010

Я не слишком знаком с AS3, но вот простой способ сделать это.

Я предполагаю, что ваш объект уже хранит координату x (я назову это object.x).Добавьте свойство «v» (для скорости) к своему объекту и установите его равным 0, а также добавьте свойство «масса», которое может быть равно 1, если вы просто хотите, чтобы объект привязывался к мыши.Когда объект щелкают, вызовите следующий код:

var animLoopID:uint = setInterval(function():void {
    // this will run every 100ms in order to animate the object
    // and will stop once the mouse is raised and the object has come to rest

    // if the mouse is still down, we want the object to follow it
    // i don't know the right syntax for this, but this should give you an idea
    if (mouseDown) {
        object.v = (mouseX - object.x)/object.mass;

        // if you make this object.v += ..., the object will
        // oscillate around the mouse instead of snapping to it
        // and you'll have to increase your mass accordingly
        // to keep it from slinging around wildly
    }
    else if (Math.abs(object.v) > 0.0001) { // 0.0001 to avoid rounding errors
        object.x += object.v;
        object.v *= 0.95; // friction -- the closer to 1, the less friction

        // you may also consider doing some bounds-checking on x here
    }
    else {
        // the mouse isn't dragging and the object is at rest...we're done :)
        clearInterval(animLoopID);
    }
}, 100);

Я понятия не имею, насколько хорошая идея сделать это в AS3, но это начало, я полагаю.Это не совсем правильно и с физической точки зрения ... Я действительно должен посмотреть уравнения движения и написать правильное решение.

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