网上虽然有不少涂鸦,但是好像关于一些回放过程的代码,实现的原理有很多,最简单的就是记录用户的操作,下面我的这个画线回放,就是记录用户鼠标移动过程。存放进一个数组里,用","和";"来区分是moveto还是lineto。这样就可以实现简单的回放了,当然,如果要实现复杂的,例如填充色等等,就需要更多的记录了... 在这里只做个开始,呵呵(可以继续添加许多功能的,例如画笔的不同等等),下面是代码: /** * @(#)DrawBoard.as * * @author soda.C E-mail:sujun10@21cn.com * @version 1.0 * <br>Copyright (C), 2007 soda.C * <br>This program is protected by copyright laws. * <br>Program Name:Soda.C.Draw * <br>Date:2008-3-18 */ package org.sujun.drawboard { import flash.display.Sprite; import fl.controls.Button; import flash.events.MouseEvent; import flash.events.Event; public class DrawBoard extends Sprite { private var playBtn :Button; //回放按钮 private var drawSprite :Sprite; //画板mc private var count :int; //回放的进度 private var pointAry :Array; //存放用户操作数据 public function DrawBoard() { playBtn = new Button(); playBtn.label = "回放"; this.addChild(playBtn); playBtn.addEventListener(MouseEvent.MOUSE_DOWN, playDraw); stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownEvent); stage.addEventListener(MouseEvent.MOUSE_UP, mouseupEvent); drawSprite = new Sprite(); this.addChild(drawSprite); //画线风格 drawSprite.graphics.lineStyle(1,0x000000); pointAry = new Array(); count = 0; } //回放事件 private function playDraw(event:MouseEvent):void { event.stopPropagation(); //准备重画 drawSprite.graphics.clear(); drawSprite.graphics.lineStyle(1,0x000000); stage.addEventListener(Event.ENTER_FRAME, onEnterFrames); } private function mouseDownEvent(event:MouseEvent):void { stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveEvent); drawSprite.graphics.moveTo(this.mouseX, this.mouseY); pointAry.push(this.mouseX + "," + this.mouseY); } private function mouseupEvent(event:MouseEvent):void { stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveEvent); } private function mouseMoveEvent(event:MouseEvent):void { drawSprite.graphics.lineTo(this.mouseX, this.mouseY); pointAry.push(this.mouseX + ";" + this.mouseY); } private function onEnterFrames(event:Event):void { if(count < pointAry.length) { var str:String = pointAry[count]; //如果是moveto记号 if(str.indexOf(",") != -1) { var ary:Array = str.split(","); drawSprite.graphics.moveTo(ary[0], ary[1]); } else { var ary2:Array = str.split(";"); drawSprite.graphics.lineTo(ary2[0], ary2[1]); } count++; } else { //结束后删除事件 stage.removeEventListener(Event.ENTER_FRAME, onEnterFrames); } } } }
特别感觉:好朋友弃天笑对【我爱RIA网】教程频道的大力支持! |