当前位置 :主页>RIA知识堂>As2.0编程>列表

Flash的画线和回放功能

时间:2008-04-06 来源:www.sujun.org  作者:弃天笑   点击:
    核心提示:实现的原理有很多,最简单的就是记录用户的操作,下面我的这个画线回放,就是记录用户鼠标移动过程。

  网上虽然有不少涂鸦,但是好像关于一些回放过程的代码,实现的原理有很多,最简单的就是记录用户的操作,下面我的这个画线回放,就是记录用户鼠标移动过程。存放进一个数组里,用","和";"来区分是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网】教程频道的大力支持!

上一篇:手把手教你用AS2动态改变影片注册点     下一篇:最简单那一个Loader加载多个swf的代码
版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。
转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。
特别注意:本站所提供的源文件,电子书,第三软件,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。
 评论内容:(最新评论共有 0) 位网友发表了评论不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码: 匿名? 马上注册
 
 
知识堂分类
RIA教程调查
RIA项目包
本站所提供的所有素材版权归原作者所有,本站只供网友参考与交流,未经作者同意请勿用于商业用途 京ICP备05051668号
服务器带宽提供:零刻数据 本站CDN由网觉天下提供技术支持。 下载带宽支持:重庆万网
52RIA.com[我爱RIA网]是中国第一个以RIA开源为主的网站:所涉及的栏目版块有RIA源码,RIA技术,RIA教程RIA酷站RIA论坛RIA第3方软件RIA电子书