我正在尝试编写一个简单的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;
}
}
}
}
答案 0 :(得分: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;
}
}
}
}
答案 1 :(得分:0)
关于先生。 BarışUşaklı的答案,我修改了课程,所以它完全正常。
此外,我修改了事件处理以提高性能,因为添加新事件侦听器并删除它们的速度非常慢。
<强>初始化:强>
var drawingBoard:Drawing = new Drawing(stage.stageWidth, stage.stageHeight);
addChild(drawingBoard);
<强>清算:强>
drawingBoard.clearDrawing();
修改颜色和铅笔宽度:
drawingBoard.drawingColor = 0x123456;
drawingBoard.drawindWidth = 16;
<强>类别:强>
package {
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
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();
private var isDrawing:Boolean = false;
public var drawingColor:uint = 0x6666aa;
public var drawingWidth:int = 2;
public function Drawing(width:int, height:int) {
trace("Drawing initialized.");
addChild(board);
board.graphics.beginFill(0xffffff, 0); // I like transparent things
board.graphics.drawRect(0, 0, width, height);
board.graphics.endFill();
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
private function onAddedToStage(event:Event):void {
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
addEventListener(MouseEvent.MOUSE_DOWN, startDrawing);
addEventListener(MouseEvent.MOUSE_UP, stopDrawing);
addEventListener(MouseEvent.MOUSE_OUT, stopDrawing);
addEventListener(MouseEvent.MOUSE_MOVE, handleDrawing);
}
public function clearDrawing():void {
board.graphics.clear();
}
private function startDrawing(event:MouseEvent):void {
trace("Start drawing.");
isDrawing = true;
}
private function stopDrawing(event:MouseEvent):void {
trace("Stop drawing.");
prevX = 0;
prevY = 0;
isDrawing = false;
}
private function handleDrawing(event:MouseEvent):void {
if (isDrawing == true){
trace("Handling drawing at " + event.localX + " x " + event.localY);
if (prevX != 0 && prevY != 0) {
board.graphics.lineStyle(drawingWidth, drawingColor, 1);
board.graphics.moveTo(prevX, prevY);
board.graphics.lineTo(event.localX, event.localY);
}
prevX = event.localX;
prevY = event.localY;
}
}
}
}