jekeyhui99 发表于 2015-11-4 12:53:37

as3画线及橡皮擦功能的实现

//主容器
var main:Sprite = new Sprite();
main.mouseEnabled = false;
addChild(main)
//临时容器(所有操作都将先画在临时容器里,再进行"画"或"擦")
var mc:Sprite = new Sprite()
main.addChild(mc)
//保存最终画出来的内容的bitmapdata
var content:BitmapData = new BitmapData(550,400,true,0x00FFFFFF);
//把content显示出来
var show:Bitmap = new Bitmap(content)
main.addChildAt(show,0)

//默认选中画笔
var action:Number = 0
txt.text = "当前选中:画笔"


mc_move.addEventListener(MouseEvent.MOUSE_DOWN,startDraw)
a.addEventListener(MouseEvent.CLICK,changeAction)
b.addEventListener(MouseEvent.CLICK,changeAction)
function changeAction(e:MouseEvent):void
{
    if(e.target.name == "a")
    {
      action = 0
      txt.text = "当前选中:画笔"
      mc.visible = true
    }else
    {
      action = 1
      txt.text = "当前选中:橡皮"
      mc.visible = false
    }
}
function startDraw(e:MouseEvent):void
{
    mc.graphics.lineStyle(20,cp.selectedColor);
    mc.graphics.moveTo(mouseX,mouseY);
    mc_move.addEventListener(MouseEvent.MOUSE_MOVE,drawing);
    stage.addEventListener(MouseEvent.MOUSE_UP,stopDraw);
}
function stopDraw(e:MouseEvent):void
{
    if(action!=1)content.draw(mc,new Matrix(),new ColorTransform(),BlendMode.NORMAL,new Rectangle(0,0,550,400))
    mc.graphics.clear()
    mc_move.removeEventListener(MouseEvent.MOUSE_MOVE,drawing);
    stage.removeEventListener(MouseEvent.MOUSE_UP,stopDraw);
}
function drawing(e:MouseEvent):void
{
    mc.graphics.lineTo(mouseX,mouseY)
    if(action==1)content.draw(mc,new Matrix(),new ColorTransform(),BlendMode.ERASE)
    e.updateAfterEvent()
}

页: [1]
查看完整版本: as3画线及橡皮擦功能的实现