Flash AS3 - нажмите, перетащите и прокрутите - проверьте направление вращения - PullRequest
2 голосов
/ 15 марта 2011

Я использую твинлайт greensock, чтобы щелкать, перетаскивать и вращать круглый видеоклип, и пока что получаю следующее.

Что мне нужно сделать, это определить направление вращения и скорость, т. Е. Если пользователь вращает колесо вправо, сохраните это направление в строковой переменной скажем, а скорость вращения в числовой переменной.

Я пробовал множество разных вещей с помощью мышиного старта и координат перемещения, а также с координатами вращения vinyl_mc, но не могу получить ничего надежного. Есть ли способ определить направление и скорость и сохранить их в переменных?

Приложение можно посмотреть по адресу: http://s46264.gridserver.com/dev/dave/rotate/rotate.html и источник fla находится по адресу: http://s46264.gridserver.com/dev/dave/rotate/rotate.fla.zip, если это вообще помогает.

Спасибо.

import com.greensock.*;
import com.greensock.easing.*;
import com.greensock.plugins.*;
import flash.events.*;

TweenPlugin.activate([ShortRotationPlugin]);
var oldRotation,ax,ay,bx,by,thetaA,thetaB,delTheta,newTheta:Number;

var direction:String;

function dragger(evt:MouseEvent)
{
    if (evt.type == MouseEvent.MOUSE_DOWN)
    {
        stage.addEventListener(MouseEvent.MOUSE_MOVE, dragger);
        stage.addEventListener(MouseEvent.MOUSE_UP, dragger);
        oldRotation = vinyl_mc.rotation;
        ax = stage.mouseX - vinyl_mc.x;
        ay = stage.mouseY - vinyl_mc.y;
        thetaA = Math.atan2(ay,ax) * 180 / Math.PI;
        if (thetaA < 0)
        {
            thetaA =  -  thetaA;
        }
        else
        {
            thetaA = 360 - thetaA;
        }

    }
    else if (evt.type == MouseEvent.MOUSE_MOVE)
    {

        bx = stage.mouseX - vinyl_mc.x;
        by = stage.mouseY - vinyl_mc.y;
        thetaB = Math.atan2(by,bx) * 180 / Math.PI;

        if (thetaB < 0)
        {
            thetaB =  -  thetaB;
        }
        else
        {
            thetaB = 360 - thetaB;
        }

        delTheta = thetaB - thetaA;
        newTheta = oldRotation - delTheta;

        TweenLite.to(vinyl_mc, 1, {shortRotation:{rotation:newTheta}, overwrite:true, ease:Cubic.easeOut});

    }
    else if (evt.type == MouseEvent.MOUSE_UP)
    {
        stage.removeEventListener(MouseEvent.MOUSE_MOVE, dragger);
        stage.removeEventListener(MouseEvent.MOUSE_UP, dragger);
    }
}


vinyl_mc.addEventListener(MouseEvent.MOUSE_DOWN, dragger);

1 Ответ

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

Что касается создания маркерного объекта на краю круга, сделайте несколько триггеров, чтобы получить угол, проверьте еще раз, сравните их. угол со временем даст вам скорость, угол1-угол2 даст вам направление.

...