Ускорение и замедление в AS3 - PullRequest
0 голосов
/ 28 октября 2010

В моем Flash-файле у меня есть колесо. Пользователь может вращать колесо с помощью стрелок для перехода к следующему «сегменту» (представьте, что 20 изображений прикреплены друг к другу, образуя окружность колеса). Wheel

Нажатие на стрелки запускает этот код:

protected function rotate():void
        {
            var rotateTo:Number = (-360 / numItems) * currentItem + 90;
            TweenLite.to(planesHolder, 1, { rotationY:rotateTo, ease:Quint.easeInOut } );
        }

Однако то, что я хочу сделать, это нажать и перетащить, чтобы вращать колесо, дополняя его ускорением и замедлением, и даже останавливаясь на ближайшем изображении, когда колесо снижается до определенной скорости. Я понятия не имею, как это сделать: мне нужно как-то определить положение курсора до и после и перевести это в скорость для колеса, которое затем замедляется со временем, а также определить, какое изображение ближе всего к определенному скорость и "щелкнуть" его, как прокрутка вверх и вниз. (это повлияет только на ось Y)

Любая помощь будет оценена

1 Ответ

1 голос
/ 28 октября 2010

Когда мышь нажата, в Enter_frame проверьте текущее смещение на предыдущую позицию:

private function enterFrameHandler(e:Event)
{
  offset = oldy - oldMousePosition;
  oldy = oldMousePosition
}

Это должно дать вам текущую скорость.(очевидно, что для колеса это снова «wheel.rotation + = offset / some_value_to_slow_it_down» в enterFrame).

для введения «замедления» вы можете использовать переменную трения.

снова, в событии enterFrame:

offset *= .8;

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

if(offset < 1)
{
  offset = 0;
  //calculate the nearest value of the wheel
  //tweenlite right over there
}
...