Actionscript 3, вращать объект при перетаскивании - PullRequest
1 голос
/ 27 мая 2011

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

1 Ответ

3 голосов
/ 27 мая 2011

Что ж, проблема, которую я вижу, состоит в том, что событие MOUSE_DOWN срабатывает только один раз за клик, поэтому вы запускаете код в обработчике только один раз.

Возможно, есть и лучший способ, но я бы подумал:

отредактировано для деталей:

public class Test extends MovieClip {
    private var n:Needle;

    public function Test() {
        // constructor code
        n = new Needle();

        stage.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownF,false,0,true);
        stage.addEventListener(MouseEvent.MOUSE_UP,mouseUpF,false,0,true);


        n.x = stage.stageWidth/2; //center needle on stage
        n.y = stage.stageHeight/2;
        addChild(n); //add needle to stage
    }
    public function mouseDownF(e:MouseEvent):void {
        stage.addEventListener(MouseEvent.MOUSE_MOVE,rotate,false,0,true);
    }
    public function rotate(e:MouseEvent):void {
        var angle:Number = Math.atan2(mouseY - n.y,mouseX - n.x); //get angle in radians (pythagoras) 

        angle = angle * 180/Math.PI -90; //convert to degrees , the 90 is to have it point to the mouse

        n.rotation = angle; //rotate
    }
    public function mouseUpF(e:MouseEvent):void {
        stage.removeEventListener(MouseEvent.MOUSE_MOVE,rotate);
    }
}

Таким образом, когда пользователь нажимает вниз (mouseDown), он активирует прослушиватель событий, который запускает обработчик rotate каждый раз, когда движется мышь. Когда пользователь отпускает щелчок, слушатель события уничтожается. false,0,true); при добавлении прослушивателя событий должен сделать его прослушивателем со слабой ссылкой , чтобы он собирался сборщиком мусора и не просто оставался в памяти, занимая пространство вечно.

...