开始新的blog之旅--flash3,0涂鸦板保存,撤销功能

一直以来都是在百度写的博客,今天不知道百度是哪抽风。居然把我的博客给封了,上贴吧去发泄一番,结果帖子都给删了。

不得不说你百度厉害,你自己犯的错误。让我们这些用户跟着受罪。我看今天很多博客都被封了,都不知道原因。提倡的用户体验呢?这也太差劲了吧。至少告诉我们哪里出现违反百度空间协议的文章或是文字了。太搞笑了。

算了,今天开始在这里写了,由于刚开始学习AS3.0这里就记录一些写过的代码和体会吧。

先发一个涂鸦板的代码咯。

/Files/skmtpsh/tuyaban.swf

有撤销和保存的功能。做撤销的时候想了半天。最后用数组实现了。用了matrix类. bitmapdata.draw方法。

 

package {
    import fl.transitions.Tween;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.DisplayObject;
    import flash.display.Loader;
    import flash.display.Sprite;    
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import com.adobe.images.JPGEncoder;
    import flash.filters.DropShadowFilter;
    import flash.geom.Matrix;
    import flash.geom.Rectangle;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.ui.Mouse;
    import flash.utils.ByteArray;
    import flash.net.URLRequestMethod;
    import fl.events.ColorPickerEvent;//组件颜色拾取器
    import flash.display.BlendMode;
    import flash.display.SimpleButton;
    import fl.transitions.easing.*;

    /**
     * ...
     * @author pangpang
     
*/        
    public class Painter extends MovieClip
    {
        private var _drawSprite:Sprite;
        private var _ok:Boolean;
        private var _lineArr:Array;
        private var _count:uint;
        private var _colorft:uint = 0xff00ff;
        private var _colorbg:uint = 0xffffff;
        private var _linestyle:Number = 2;
        private var _alphastyle:Number = 1;
        private var _fileName = "picSave";
        private var _boardOpen:MovieClip;
        
        private var _btmp:Bitmap;
        public function Painter()
        {
            _lineArr = new Array();//存放数组
            _drawSprite = new Sprite();//背景sprite
            
            //scrollboard_mc.visible = false; //滚动面板可见
            
            //增加背景图片
            addParent(_colorbg, _drawSprite);
            addMcEvent(_drawSprite);
        }
        /**
         * 增加背景
         
*/            
        private function addParent(_color:uint,_parentMc:Sprite):void
        {
            _parentMc.graphics.lineStyle(2, 0x4E7EAD, 1);    
            _parentMc.graphics.beginFill(_color);
            _parentMc.graphics.drawRoundRect(58, 51, 474, 328,5);
            _parentMc.graphics.endFill();        
            addChild(_parentMc);                
        }
        /**
         * 增加画图背景
         
*/    
        private function addSprite(_color:uint,_parentMc:Sprite):void
        {
            var $sprite:Sprite = new Sprite();                
            $sprite.graphics.beginFill(_color,0);
            $sprite.graphics.drawRoundRect(60, 53, 470, 324,5);
            $sprite.graphics.endFill();    
            $sprite.width = 470;
            $sprite.height = 324;
            _parentMc.addChild($sprite);
            
            $sprite.graphics.lineStyle(_linestyle, _colorft, _alphastyle);            
            $sprite.graphics.moveTo(mouseX, mouseY);    
            _lineArr.push($sprite);        
        }
        /**
         * 注册侦听器
         
*/            
        private function addMcEvent(_mc:Sprite):void
        {
            _mc.addEventListener(MouseEvent.MOUSE_DOWN, downHandle);
            _mc.addEventListener(MouseEvent.MOUSE_UP, upHandle);
            _mc.addEventListener(MouseEvent.MOUSE_MOVE, moveHandle);    
            
            //按钮注册侦听器            
            save_Btn.addEventListener(MouseEvent.MOUSE_DOWN,saveHandle);
            clear_Btn.addEventListener(MouseEvent.MOUSE_DOWN,clearHandle);
            reDo_Btn.addEventListener(MouseEvent.MOUSE_DOWN, reDoHandle);    
            
            //颜色拾取器注册侦听器
            
            cp_front.addEventListener(ColorPickerEvent.CHANGE,frontHandle);
            cp_bg.addEventListener(ColorPickerEvent.CHANGE, bgHandle);
            
            //拖动按钮注册侦听器
            line_btn.addEventListener(MouseEvent.MOUSE_DOWN, startDragLineHandle);
            stage.addEventListener(MouseEvent.MOUSE_UP, stopDragLineHandle);
            line_btn.addEventListener(MouseEvent.MOUSE_MOVE, moveDragLineHandle);
            
            alpha_btn.addEventListener(MouseEvent.MOUSE_DOWN, startDragAlphaHandle);
            stage.addEventListener(MouseEvent.MOUSE_UP, stopDragAlphaHandle);
            alpha_btn.addEventListener(MouseEvent.MOUSE_MOVE, moveDragAlphaHandle);
            
            //滚动条注册侦听器
            //scrollBarboard_mc.addEventListener(MouseEvent.MOUSE_DOWN,openHandle);
        }
        /*
         *滚动条函数
         
*/
        private function openHandle(evt:MouseEvent):void
        {
            var $urlRequest:URLRequest = new URLRequest("shuoming.swf");
            var $urlLoader:Loader = new Loader();
            $urlLoader.load($urlRequest);
            $urlLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadHandle);
        }
        private function loadHandle(evt:Event):void
        {
            var $loadContent:MovieClip = evt.target.content;
            var $tween:Tween = new Tween($loadContent, "alpha", Elastic.easeOut, 0, 1, 2,true);
            $loadContent.y = stage.stageHeight / 2-$loadContent.height/2;
            $loadContent.x = stage.stageWidth / 2-$loadContent.width/2;
            addChild($loadContent);
            //_boardOpen = $loadContent
            //$loadContent.btn_close.addEventListener(MouseEvent.MOUSE_DOWN,closeHanle);
        }
        private function closeHanle(evt:MouseEvent):void
        {
            //removeChild(_boardOpen);
        }
        /**
         * 拖动按钮
         
*/
        private function startDragLineHandle(evt:MouseEvent):void
        {
            line_btn.useHandCursor = true;
            line_btn.startDrag(true, new Rectangle(106, 30, 60, 0));
        }
        private function stopDragLineHandle(evt:MouseEvent):void
        {
            line_btn.stopDrag();
        }
        private function moveDragLineHandle(evt:MouseEvent):void
        {
            _linestyle = int(((line_btn.x - 106) / 60) * 10);
        }
        
        private function startDragAlphaHandle(evt:MouseEvent):void
        {    
            alpha_btn.startDrag(true, new Rectangle(226, 30, 60, 0));
            alpha_btn.useHandCursor = true;
        }
        private function stopDragAlphaHandle(evt:MouseEvent):void
        {
            alpha_btn.stopDrag();
        }
        private function moveDragAlphaHandle(evt:MouseEvent):void
        {
            _alphastyle =  1-(alpha_btn.x - 226) / 60;
        }        
        /**
         * 颜色
         
*/
        private function frontHandle(evt:ColorPickerEvent):void
        {
            _colorft = cp_front.selectedColor;
        }
        private function bgHandle(evt:ColorPickerEvent):void
        {
            _colorbg = cp_bg.selectedColor;
            addParent(_colorbg, _drawSprite);//重置背景色
        }        
        /**
         * 处理函数
         
*/            
        private function downHandle(evt:MouseEvent):void
        {
            _ok = true;    
            addSprite(0xffffff, _drawSprite);        
        }
        
        private function upHandle(evt:MouseEvent):void
        {
            _ok = false;
        }
        
        private function moveHandle(evt:MouseEvent):void
        {
            if(_ok){
                _lineArr[_lineArr.length - 1].graphics.lineTo(mouseX, mouseY);
                evt.updateAfterEvent();        
            }
        }
        /**
         * 
         *按钮 
         
*/
        //保存
        private function saveHandle(evt:MouseEvent):void
        {
            var _bt:BitmapData = new BitmapData(474, 328,false,0x000000);
            for (var i:int = _drawSprite.numChildren; i > 0; i--)
            {
                _bt.draw(_lineArr[i-1], new Matrix(1, 0, 0, 1, -58, -51));
            }
            _btmp = new Bitmap(_bt);
            var jpgEncoder:JPGEncoder = new JPGEncoder(90);
            var bytes:ByteArray = jpgEncoder.encode(_bt);
            var urlR:URLRequest = new URLRequest("http://127.0.0.1/readPic.asp?filename=picSave");
            urlR.data = bytes;
            urlR.method = URLRequestMethod.POST;
            urlR.contentType = "application/octet-stream";
            
            var urlL:URLLoader = new URLLoader();
            urlL.load(urlR);
            urlL.addEventListener(Event.COMPLETE,completeHandler);            
        }
        private function completeHandler(evt:Event):void
        {
            addChild(_btmp);
            _btmp.x = stage.stageWidth / 2 - _btmp.width / 2;
            _btmp.y = stage.stageHeight / 2 - _btmp.height / 2;
            var $filt:DropShadowFilter = new DropShadowFilter(0x000000, 50, 1, 1, 10, 10, 3, 1, false);
            _btmp.filters.push($filt);
            stage.addEventListener(MouseEvent.MOUSE_DOWN, closeBtHandle);
        }
        private function closeBtHandle(evt:MouseEvent):void
        {
            if (_btmp != null && this.contains(_btmp) )
            {
                removeChild(_btmp);
            }
        }
        //清除graphics。重新生成
        private function clearHandle(evt:MouseEvent):void
        {
            if (_drawSprite.numChildren >= 1)
            {
                for (var i:int = _drawSprite.numChildren; i >0; i--)
                {
                    _drawSprite.removeChild(_lineArr[i-1]);
                    _lineArr.splice(i - 1, 1);
                }
            }                    
        }
        //撤销
        private function reDoHandle(evt:MouseEvent):void
        {
            if (_drawSprite.numChildren >= 1)
            {
                _drawSprite.removeChild(_lineArr[_lineArr.length - 1]);
                _lineArr.splice(_lineArr.length - 1, 1);
            }
        }        
    }
}

 

转载于:https://www.cnblogs.com/skmtpsh/archive/2012/05/07/2487550.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576470.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JDK8HashMap的扩容核心解读,尾插法

看懂了JDK7Hashmap的扩容头插法,及其可能产生的循环引用问题,今天看看JDK8的HashMap扩容实现。采取的是用四个结点,两条链表完成重新分配位置,比较简单有趣。解析如下: //如果原来的table等于null,直接返回…

领导者的资质——学习笔记(1)

领导者的资质——学习笔记(1)《领导者的资质》是稻盛和夫先生著作的一本书,书中的道理值得深深思考和体会,结合自己工作、生活中的一些事情,会有不同的感觉。本学习笔记特此记录书中重点的内容,供以后反复阅…

[转帖]ISE与Modelsim联合观察中间信号

如何仿真IP核(建立modelsim仿真库完整解析) 来源:http://www.ednchina.com/ART_49023_19_0_AN_7116cf44.HTM IP核生成文件:(Xilinx/Altera 同) IP核生成器生成 ip 后有两个文件对我们比较有用,假…

计算时间复杂度

步骤: 1、找到执行次数最多的语句 2、语句执行语句的数量级 3、用O表示结果 计算时间复杂度的3个出发点,掌握这三个出发点,那么一向搞不懂的时间复杂度就可以迎刃而解啦。 然后: 1、用常数1取代运行时间中的所有加法常数 2、…

领导者的资质——学习笔记(2):领导者的人格

领导者的资质——学习笔记(2):领导者的人格在领导者的资质中,人格最为重要。领导者保持自己高层次的人格,是解决当前企业治理危机最根本性的方略。我们要时时事事思考“作为人,何为正确”不断自问自答&…

sql server 2008学习12 事务和锁

事务 事务的点: 1.begin tran 是事务开始的地方,也是 事务回滚的起点.也就说他会忽略这个起点之后的最终没有提交的所有语句, 2.commit tran 事务的提交 是一个事务的终点 当发出 commit tran命令时,可以认为 该事务是 持久的. 撤销已完成事务的唯一方法 是 发出一个新的事务.…

领导者的资质——学习笔记(3):领导者的十项职责

领导者的资质——学习笔记(3):领导者的十项职责领导者必须向员工说明工作的目的意义,设定具体目标,制定相应的计划,怀着强烈的愿望,付出不亚于任何人的努力,表现出坚强的意志&#x…

漫画:什么是时间复杂度?

时间复杂度的意义 究竟什么是时间复杂度呢?让我们来想象一个场景:某一天,小灰和大黄同时加入了一个公司...... 一天过后,小灰和大黄各自交付了代码,两端代码实现的功能都差不多。大黄的代码运行一次要花100毫秒&#x…

Eclipse如何连接SQL Server 2005数据库

做管理系统当然少不了经常与数据库打交道,在网上搜了很多数据库版本都不小,大的有好几个G的,小的也有几百兆的,我这可怜的内存,最终找了个精简版中的精简版的Sql server2005,只有80几兆,本来只想…

NLP 最新进展

参考文献: •http://www.dataguru.cn/article-14237-1.html •https://zhuanlan.zhihu.com/p/46652512 •https://github.com/google-research/bert •https://allennlp.org/elmo •https://arxiv.org/pdf/1802.05365 •https://arxiv.org/abs/1810.04805

一句话评论设计模式六大原则

注:转自http://blog.csdn.net/jesse621/article/details/7216331 原则,故名思议则是本质的意思。所谓擒贼先擒王,研究设计模式自然要先了解设计原则,所有的模式都是在这些原则的基础之上发展起来的,有的是侧重一 个&am…

Big GAN

参考文献: •https://github.com/kayamin/DR-GAN •https://www.jianshu.com/p/4ee8f9284b81 •http://cvlab.cse.msu.edu/pdfs/Tran_Yin_Liu_CVPR2017.pdf •https://arxiv.org/abs/1809.11096 •https://juejin.im/entry/5c05e76c51882539c60cf2d5 •https:…

时间复杂度空间复杂度怎么算?

什么是算法 算法的定义是这样的:解题方案的准确而完善的描述,是一系列解决问题的清晰指令。巴拉巴拉的,虽然是一小句但还是不想看(题外话:有时候吧专业名词记下来面试的时候还是挺有用的),其实…

什么样的知识,值得我们终生学习

#什么样的知识,值得我们终生学习? 原文:https://dwz.cn/vylyXXJi 一、引言 可能你从初中就开始抱怨:我学相似三角形能干什么?阿伏伽德罗常数有什么用?我一不跳楼,二不高空抛物,学自由…

美团面试题:Hashmap的结构,1.7和1.8有哪些区别,深入的分析

(一) 真实面试题之:Hashmap的结构,1.7和1.8有哪些区别 不同点: (1)JDK1.7用的是头插法,而JDK1.8及之后使用的都是尾插法,那么他们为什么要这样做呢?因为JDK1…

作品展结束了,学习才真正的开始

我的作品展旅程分为两个大的部分。 一、班里的事务(这是最重要,也最为艰巨的。) 从4月15号自考结束后,开始真正进入作品展的筹划阶段。主要和唐欢负责作品的筛选工作,由于我工作经验有限,能力更是有限&…

数据结构第一章概论习题及答案

一、名词解释 1.数据表示 2.数据处理 3.数据 4.数据元素 5.逻辑关系 6.逻辑结构 7.结构 8.运算 9.基本运算 10.存储结构 11.顺序存储结构 12.链式存储结构 13.索引存储结构 14.散列存储结构 15.算法 16.运行终止的程序可执行部分 17.…

管理学习笔记(1)——高效团队的五大关键

高效团队的五大关键1. 安全感:敢于冒险,不会因此干到不安 2. 可靠性:指望他人可以准时完成高质量的工作 3. 结构与清晰度:目标、角色和执行计划都很清楚、明确 4. 工作意义:对各自来说做意义重大的工作 5. 工作影响…

算法导论-用于不相交集合的数据结构

21.2-4 对于图21-3中操作序列的运行时间,给出其紧确的渐近界。假定采用的是链表表示和加权合并启发式策略。 解:make-set,O(n);加权合并启发,每次将较短链表链接到较长链表,即每次将长度为1的集合链接到另外…

大数据技术之 Kafka (第 3 章 Kafka 架构深入 ) Kafka 消费者

3.3.1 消费方式 consumer 采用 pull(拉)模式从 broker 中读取数据。 push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由 broker 决定的。 它的目标是尽可能以最快速度传递消息,但是这样很…