这几天看了同学一张自制光盘,觉得很有意思,于是尝试通过as3编程来制作这个类,其实就是使用了绘图API类通过填充位图的方式来实现这种cd的效果。

我们需要准备的材料是几张图片。这些图片通过外部加载的方式来实现获取位图的数据,然后通过一个函数beginBitmapFill 使用位图来进行填充这个圆形。而中间的周边的圆则是通过drawCircle 来进行绘制,绘制过程当中,使用一些接近灰色的颜色来实现搭配,这样看起来有的胶泽的味道在里面。

制作流程:

1. 外部加载图片.

2.使用位图对图片进行填充beginBitmapFill

3.在填充完成之后,drawCircle 几个圆用于cd中间的圆圈

4。可以尝试封装加载的方式对图像进行管理。

整个流程使用的 并没有什么的算法,而仅仅是使用我们平时的绘图api进行创作。当你慢慢发现到绘图api 魅力的时候,你就可以像画家一样操控画笔进行描绘你的图案。这样又多了一样好玩的东西了。

测试:

package { import flash.display.*; import flash.net.*; import flash.events.*; import flash.filters.*; import flash.geom.*; public class Example extends Sprite { private var manager:CDManager=new CDManager();//cd管理类 public function Example() { init(); } private function init():void { manager.addEventListener(CDManager.LOAD_ALL_COMPLETE,onLoadAllComplete); manager.addImage("cd1",this,100,"1.jpg",true);//添加图片列表 manager.addImage("cd2",this,100,"2.jpg",true); manager.addImage("cd3",this,100,"3.jpg",true); manager.addImage("cd4",this,100,"4.jpg",true); manager.addImage("cd5",this,100,"5.jpg",true); manager.addImage("cd6",this,100,"6.jpg",true); manager.start();//开始加载外部图片 } private function onLoadAllComplete(event:Event):void { manager.getImage("cd1").drawCD(manager.getImage("cd1").content,10,15,30,new Point(-280,-180));//绘制cd图案 manager.move("cd1",stage.stageWidth/2-100,stage.stageHeight/2+150);//设置位置 manager.getImage("cd1").filters=[new DropShadowFilter(3,45,0.5,1,1)]; manager.getImage("cd2").drawCD(manager.getImage("cd2").content,10,15,30,new Point(-170,-230)); manager.move("cd2",stage.stageWidth/2-200,stage.stageHeight/2); manager.getImage("cd2").filters=[new DropShadowFilter(3,45,0.5,1,1)]; manager.getImage("cd3").drawCD(manager.getImage("cd3").content,10,15,30,new Point(-280,-100)); manager.move("cd3",stage.stageWidth/2,stage.stageHeight/2); manager.getImage("cd3").filters=[new DropShadowFilter(3,45,0.5,1,1)]; manager.getImage("cd4").drawCD(manager.getImage("cd4").content,10,15,30,new Point(-180,-100)); manager.move("cd4",stage.stageWidth/2+200,stage.stageHeight/2); manager.getImage("cd4").filters=[new DropShadowFilter(3,45,0.5,1,1)]; manager.getImage("cd5").drawCD(manager.getImage("cd5").content,10,15,30,new Point(-180,-100)); manager.move("cd5",stage.stageWidth/2+200,stage.stageHeight/2-200); manager.getImage("cd5").filters=[new DropShadowFilter(3,45,0.5,1,1)]; manager.getImage("cd6").drawCD(manager.getImage("cd6").content,10,15,30,new Point(-400,-100)); manager.move("cd6",stage.stageWidth/2,stage.stageHeight/2-200); manager.getImage("cd6").filters=[new DropShadowFilter(3,45,0.5,1,1)]; } } }

package { import flash.utils.Dictionary; import flash.events.*; import flash.display.DisplayObjectContainer; public class CDManager extends EventDispatcher { private var data:Dictionary=new Dictionary(true); private var length:int=0; public static const LOAD_ALL_COMPLETE:String="loadallcomplete";//加载 public function CDManager() { } //添加图片 public function addImage(id:String,parent:DisplayObjectContainer,radius:Number,url:String,istartDrag:Boolean=false):void { var obj:Object={}; obj.id=id; obj.url=url; obj.item=new LoveCD(radius); obj.istartDrag=istartDrag; parent.addChild(obj.item); data[id]=obj; length++; } //开始加载 public function start():void { for each (var obj:* in data) { obj.item.loadImage(obj.url); obj.item.addEventListener(LoveCD.LOAD_COMPLETE,onLoadComplete); if(obj.istartDrag) { obj.item.addEventListener(MouseEvent.MOUSE_DOWN,onStartDragHandler); obj.item.addEventListener(MouseEvent.MOUSE_UP,onStopDragHandler); } } } private function onLoadComplete(event:Event):void { event.currentTarget.removeEventListener(LoveCD.LOAD_COMPLETE,onLoadComplete); length--; if(length==0) { this.dispatchEvent(new Event(CDManager.LOAD_ALL_COMPLETE)); } } //拖动 private function onStartDragHandler(event:MouseEvent):void { event.currentTarget.buttonMode=true; event.currentTarget.startDrag(false); } //停止拖动 private function onStopDragHandler(event:MouseEvent):void { event.currentTarget.buttonMode=false; event.currentTarget.stopDrag(); } //获取图片 public function getImage(id:String):LoveCD { return data[id].item; } public function move(id:String,x:Number,y:Number):void { data[id].item.x=x; data[id].item.y=y; } } }

LoveCD.as

package { import flash.display.*; import flash.net.*; import flash.events.*; import flash.filters.*; import flash.geom.*; public class LoveCD extends Sprite { private var radius:Number; private var _bitmap:Bitmap; public static const LOAD_COMPLETE:String="complete"; public var url:String; public function LoveCD(radius:Number) { this.radius=radius; } //加载图片 public function loadImage(url:String):void { this.url=url; var loader:Loader=new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoadComplete); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,onErrorHandler); loader.load(new URLRequest(url)); } //绘制底部 public function drawBase():void { var bottomShape:Shape=new Shape(); addChild(bottomShape); //trace(radius); bottomShape.graphics.beginFill(0xffffff,0.5); bottomShape.graphics.drawCircle(0,0,this.radius); bottomShape.graphics.drawCircle(0,0,this.radius-2); bottomShape.graphics.endFill(); } private function onErrorHandler(event:Event):void { throw new Error("发送错误"); } private function onLoadComplete(event:Event):void { event.currentTarget.removeEventListener(Event.COMPLETE,onLoadComplete); event.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR,onErrorHandler); var bitmap:Bitmap=Bitmap(event.currentTarget.content); this.content=bitmap; this.dispatchEvent(new Event(LoveCD.LOAD_COMPLETE)); } //设置位图 public function set content(value:Bitmap):void { this._bitmap=value; } public function get content():Bitmap { return this._bitmap; } public function move(x:Number,y:Number):void { this.x=x; this.y=y; } //绘制CD,radiusA,radiusB,radiusC,由小到大 public function drawCD(image:Bitmap,radiusA:Number,radiusB:Number,radiusC:Number,offPoint:Point=null,repeat:Boolean=false,smooth:Boolean=false):void { drawBase(); var maskShape:Shape=new Shape(); maskShape.x=0; maskShape.y=0; addChild(maskShape); if (offPoint==null) { maskShape.graphics.beginBitmapFill(image.bitmapData,null,repeat,smooth); } else { maskShape.graphics.beginBitmapFill(image.bitmapData,new Matrix(1,0,0,1,offPoint.x,offPoint.y),repeat,smooth); } maskShape.graphics.drawCircle(0,0,radiusA); maskShape.graphics.drawCircle(0,0,radius-2); maskShape.graphics.endFill(); var shapeB:Shape=new Shape(); shapeB.x=0; shapeB.y=0; addChild(shapeB); shapeB.graphics.beginFill(0x999999,0.3); shapeB.graphics.lineStyle(0,0x999999); shapeB.graphics.drawCircle(0,0,radiusB); shapeB.graphics.drawCircle(0,0,radiusB+2); shapeB.graphics.drawCircle(0,0,radiusC); shapeB.graphics.endFill(); shapeB.graphics.lineStyle(0,0xffffff,0.6); shapeB.graphics.drawCircle(0,0,radiusC-1); } } }

每天学一点flash(73) 恋上我的CD相关推荐

  1. flash绘图API:恋上你的CD

    早上,我无意间碰撞到一个女孩,那时候,她匆匆忙地走了.从她的口袋里面掉下了一本陈旧的书,在哪里我看到她藏在书中的那封陈旧的信和cd.我好奇打开它,一边听着她那张cd,一边看她的写的信,忽然间有一种恋上 ...

  2. as3 与 java_每天学一点Flash(48) As3.0 与 java 通信(1)

    在as2.0 已经有关于Socket 相关的编程,到了3.0后新增了Socket类,可以更加强大的进行Socket相关的编程,只是有一点Flash 还没有达到可以自己编写服务器相关的类,那只好借助ja ...

  3. 每天学一点flash(11) as3.0 与asp 通信 (1)

    经过几次的尝试啊,今天终于实现了as3.0与asp通信.我用access做了一个最简单的测试其目的就是调试代码方便.好现在开始吧 首先:必须准备asp 与access文件,而且要先用代码连接上acce ...

  4. 每天学一点flash(76)百度MP3音乐APi接口使用

    百度MP3音乐API接口及应用 http://cloud21.javaeye.com/blog/611914 这里有一篇关于百度MP3音乐APi接口的应用,写了一下关于这个百度接口的应用,他可以提供一 ...

  5. 每天学一点flash(67) 上传图片

    今天换个口味,制作一下上传图片,功能个人希望尽量简单化,方便理解:Flash cs4 对FileReference 类增加几项内容 如data 属性能够获取到一个data : ByteArray 这个 ...

  6. 每天学一点flash 76 百度MP3音乐APi接口使用

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 百度MP ...

  7. 每天学一点flash(53) 关于直线的对称点

    求点A(3,1)关于直线x+y-1=0的对 最佳答案 设对称点坐标是B(x,y),那么AB的中点坐标是 ((3+x)/2,(1+y)/2),它在直线上. (3+x)/2+(1+y)/2-1=0 (y- ...

  8. 每天学一点flash (20) flash cs3.0 外部加载图片

    今天开始看了一些外部加载图片的,因为as3.0 外部加载已经没有没有了loadMovie类,所以as3.0要转变思想了.可是迷惘的事情特别多,之前看了一些关于容器的那些东西,看不懂.也许我还没有入门吧 ...

  9. 每天学一点flash(40) 制作走马灯四

    在原来的基础上再增加多一个鼠标触发事件,那就是响应点击事件.当我们点击了每一张图片的时候那么我们就可以判断每一张所在连接图片的网址了.代码如下: package {  import flash.dis ...

最新文章

  1. JsonUtils 工具类
  2. strip 命令的使用方法
  3. 2020 中国开源年会(COSCon'20)再启程:开源向善(Open Source for Good)
  4. 注解 @CrossOrigin
  5. 测试需要了解的技术之基础篇四__UI自动化测试体系
  6. 养兔子Fibo函数优化
  7. 在项目中使用HTMLDom的事件冒泡机制
  8. 会员分享几个平时看榜单常去的网站
  9. 全年CCF级别会议列表
  10. 为什么我偏爱用GitHub来写书?
  11. 74ls20设计半加器_实验二++组合逻辑电路的设计与测试.ppt
  12. JDBC简介,JDBC API,,MySQL连接、SQL语句
  13. Linux(centos)增加账户内存(Resource temporarily unavailable问题)
  14. google 企业邮箱 smtp pop3设置
  15. luogu P3934 [Ynoi2016] 炸脖龙 I
  16. 二层交换机 三层交换机 四层交换机的区别
  17. Python数据分析入门(一)——初探数据可视化
  18. 浅谈移动端——前端适配详解
  19. 跨界教授林宙辰:从北大来,回北大去
  20. QT-----无人机地面站如何修改显示界面1——OpenPilotGCS_config.xml

热门文章

  1. mysql主从配置duxi_DUX主题
  2. Tesseract+OpenCV实现中英文字识别
  3. 学习C语言需要学oracle,什么是C语言? 为什么要学习C语言?
  4. Linux无桌面环境下,实现USB的自动挂载/卸载
  5. 计算机系统基础书籍读后感,计算机系统基础试题.doc
  6. 开关配置springboot定时任务
  7. DevExpress WinForms Controls v22.1 beta版来袭,上车
  8. mysql更改date为ym_关于日期格式设置及转换
  9. 用计算机怎么求反三角函数图像及性质,反三角函数图像及性质
  10. 016.从中序与后序遍历序列构造二叉树