AS3: Живое рисование? - PullRequest
       15

AS3: Живое рисование?

1 голос
/ 13 октября 2011

У меня есть одна странная проблема: если я использую graphics.lineTo при перемещении мыши ( MOUSE_MOVE ), линии создаются в реальном времени. Но если я изменю его на MOUSE_DOWN , линии будут прямыми и не будут реагировать на нажатие мыши.

Вот пример:

        stage.addEventListener(MouseEvent.MOUSE_MOVE, follow);
        stage.addEventListener(MouseEvent.MOUSE_DOWN, draw);


    private function follow(e:MouseEvent){

        trace(e.localY);

        activeChalk.x = e.stageX;
        activeChalk.y = e.stageY;

    }


    private function draw(e:MouseEvent){

        trace(e.localY);

        activeChalk.x = e.stageX;
        activeChalk.y = e.stageY;
        board.graphics.lineTo(e.stageX,e.stageY);
    }

РЕДАКТИРОВАТЬ: Мне удалось заставить его работать, используя следующий пример: http://www.foundation -flash.com / учебники / as3drawingbymouse /

Ответы [ 2 ]

3 голосов
/ 13 октября 2011

Ваше приложение в корне ошибочно различными способами.

Вместо того, чтобы вдаваться в детали, вот очень простая реализация рисования:

package
{
    import flash.display.Graphics;
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.MouseEvent;
    import flash.geom.Point;

    [SWF(percentWidth = 100, percentHeight = 100, backgroundColor = 0xefefef, frameRate = 30)]
    public class Chalk extends Sprite
    {

        protected var lastPoint:Point;

        public function Chalk()
        {
            super();

            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;

            initializeDrawing();
        }

        protected function initializeDrawing():void
        {
            stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
        }

        protected function mouseDownHandler(event:MouseEvent):void
        {
            stage.removeEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);

            // mark mouse down location
            lastPoint = new Point(mouseX, mouseY);

            // listen for movement or up/out
            stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
            stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
            stage.addEventListener(MouseEvent.MOUSE_OUT, mouseUpHandler);
        }

        protected function mouseMoveHandler(event:MouseEvent):void
        {
            var g:Graphics = graphics;
            g.lineStyle(1, 0x0000ff);

            // draw line segment
            g.moveTo(lastPoint.x, lastPoint.y);
            g.lineTo(mouseX, mouseY);

            // mark end of line segment
            lastPoint = new Point(mouseX, mouseY);
        }

        protected function mouseUpHandler(event:MouseEvent):void
        {
            stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
            stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
            stage.removeEventListener(MouseEvent.MOUSE_OUT, mouseUpHandler);

            // prepare for next line
            initializeDrawing();
        }

    }
}
0 голосов
/ 13 октября 2011

Не совсем странно, когда вы щелкаете мышью, отправляется одно событие MOUSE_DOWN, после чего отправляются события MOUSE_MOVE.

Вы можете просто отслеживать свои события, чтобы точно узнать, что происходит.

...