2

単純な as3 描画クラスを作成しようとしていますが、機能しません。イベントも発生しません。何が問題なのですか?

使用法:

var drawingBoard:Drawing = new Drawing();
drawingBoard.x = 0;
drawingBoard.y = 0;
drawingBoard.width = 200;
drawingBoard.height = 100;

addChild(drawingBoard);

クラス:

package {
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.MouseEvent;

    public class Drawing extends Sprite {
        private var prevX:Number = 0;
        private var prevY:Number = 0;
        private var board:Shape = new Shape();

        public function Drawing() {
            trace("Drawing initialized.");

            addChild(board);

            addEventListener(MouseEvent.MOUSE_DOWN, startDrawing);
            addEventListener(MouseEvent.MOUSE_UP, stopDrawing);
            addEventListener(MouseEvent.MOUSE_OUT, stopDrawing);
        }

        private function startDrawing(event:MouseEvent):void {
            trace("Start drawing.");

            addEventListener(MouseEvent.MOUSE_MOVE,handleDrawing);
        }

        private function stopDrawing(event:MouseEvent):void {
            trace("Stop drawing.");

            prevX = 0;
            prevY = 0;
            removeEventListener(MouseEvent.MOUSE_MOVE,handleDrawing,false);
        }

        private function handleDrawing(event:MouseEvent):void {
            trace("Handling drawing.");

            if (prevX == 0 || prevY == 0) {
                prevX = event.localX;
                prevY = event.localY;
            } else {
                board.graphics.lineStyle(10, 0x000000, 1);
                board.graphics.moveTo(prevX, prevY);
                board.graphics.lineTo(event.localX, event.localY);
                prevX = event.localX;
                prevY = event.localY;
            }
        }
    }
}
4

2 に答える 2

3

まずwidth/height、空のスプライトの を設定しても何も起こりません。寸法が 200/100 の空のスプライトが必要ない場合は、そこに何かを描画する必要があります。

ステージに追加した後にクラスが機能するように、クラスを変更しました。

package {
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.MouseEvent;

    public class Drawing extends Sprite {
        private var prevX:Number = 0;
        private var prevY:Number = 0;
        private var board:Shape = new Shape();

        public function Drawing() {
            trace("Drawing initialized.");

            addChild(board);
            //clear board to white
            board.graphics.beginFill(0xffffff,1);
            board.graphics.drawRect(0,0,200,100);
            board.graphics.endFill();

            addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
        }

        private function onAddedToStage(e:Event):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);

            addEventListener(MouseEvent.MOUSE_DOWN, startDrawing);
            addEventListener(MouseEvent.MOUSE_UP, stopDrawing);
            addEventListener(MouseEvent.MOUSE_OUT, stopDrawing);
        }

        private function startDrawing(event:MouseEvent):void {
            trace("Start drawing.");

            addEventListener(MouseEvent.MOUSE_MOVE,handleDrawing);
        }

        private function stopDrawing(event:MouseEvent):void {
            trace("Stop drawing.");

            prevX = 0;
            prevY = 0;
            removeEventListener(MouseEvent.MOUSE_MOVE,handleDrawing,false);
        }

        private function handleDrawing(event:MouseEvent):void {
            trace("Handling drawing.");

            if (prevX == 0 || prevY == 0) {
                prevX = event.localX;
                prevY = event.localY;
            } else {
                board.graphics.lineStyle(10, 0x000000, 1);
                board.graphics.moveTo(prevX, prevY);
                board.graphics.lineTo(event.localX, event.localY);
                prevX = event.localX;
                prevY = event.localY;
            }
        }
    }
}
于 2013-03-19T15:25:50.297 に答える