AS功能代码教程:BitmapData动态效果
[ 2008-10-6 16:13:00 | By: 刘涛 ]
 
一、计算机中显示的图形一般可以分为两大类——矢量图和位图。矢量图(vector):使用直线和曲线来描述图形,这些图形的元素是一些点、线、矩形、多边形、圆和弧线等等,它们都是通过数学公式计算获得的。众所周知Flash就是一款矢量动画制作软件。在AS中使用的填色(beginFill),画线(lineTo)等命令都是基于对矢量图的操作。位图(Bitmap):一般是用于照片品质的图像处理,是由许多像小方块一样的像素组成的图形。简单地说,位图就是以无数的色彩点组成的图案。位图(Bitmap)也就是我们今天要介绍的。两者比较:1、矢量图可以无限放大,而且不会失真; 而位图会失真。2、位图由像素组成而矢量图由矢量线组成。3、位图可以表现的色彩比较多;而矢量图则相对较少。4、矢量图体积小,但比较消耗计算资源;位图则比较消耗内存资源,但对计算资源消耗小。 二、BitmapData类的概念BitmapData类可用于在文档中创建可任意调整大小的透明或不透明位图图像,并且可以在运行时以各种方式对它们进行处理。可以把BitmapData对象看成一个特殊的数组,专门用来存储位图的像素点阵信息。如果一个位图大小是100*100,那么BitmapData中就好比一个存储在一个100*100的二维数组,对应存储这10000像素的颜色值。三、BitmapData类的使用import flash.display.BitmapData;//导入BitmapData类var bm = new BitmapData(width,height,transparent,fillcolor);//实例化 四、BitmapData构造函数public BitmapData(width, height, [transparent], [fillColor])width(宽):位图数据的宽度(像素);height(高): 位图数据的高度(像素);[transparent(透明度)]: 是否支持每个像素具有不同的透明度;[fillcolor(添充色)]: 用于填充位图图像区域。默认为0xFFFFFFFF(白色)*[中括号]表示可选参数例如(创建一个100*100的位图数据):import flash.display.BitmapData;var bm:BitmapData = new BitmapData(100,100,false,0xffff00) 五、BitmapData.draw()方法Draw()方法简单地理解为:复制像素到BitmapData对象中。例如:在主场景有一个影片剪辑,实例名为"pic"import flash.display.BitmapData;var bm:BitmapData = new BitmapData(100, 100);bm.draw(pic);//bm复制pic的像素_root.createEmptyMovieClip("mc", 10);mc._x = mc._y=150;mc.attachBitmap(bm, 1);//用mc加载位图数据bm,深度为1。*注意:位图在影片剪辑(pic)中的位置。 在使用draw()方法复制像素时,永远是从mc的(0,0)点开始取。所以小于(0,0)位置的像素都不会被取到。 应正确放置位图在影片剪辑中的位置(注册点在左上(0,0))六、Rectangle 类所以介绍Rectangle 类是因为它常与BitmapData类配合使用。1、作用:在BitmapData类中用于定义位图图像大小和位置的矩形。2、Rectangle 类的使用import flash.geom.Rectangle;public Rectangle(x, y, width, height)x - 矩形左上角的 x 坐标。y - 矩形左上角的 y 坐标。width - 矩形的宽度,以像素为单位。height - 矩形的高度,以像素为单位。 例如(一个100*100的矩形):import flash.geom.Rectangle;myRect = new Rectangle(0,0,100,100); 好啦,说了这么多理论知识,都是为我们的实例做铺垫的,下面就开始动手操作吧!实例1:放大镜效果[BitmapData. copyPixels()] /UploadTeach/200712/2007120716636454.swf 思路:1、点击图片后,从点击处复制一块(100*80)像素;         2、把复制出来的像素(bm2)加载入mc中,并放大mc。步骤一:  在主场景中放入一位图,保存为影片剪辑,实例名为"pic",放入舞台中;  注意:该位图在pic中的注册点应为左上(0,0),以确保正确显示。步骤二:加入AS代码: import flash.display.BitmapData; import flash.geom.Rectangle; var bm1:BitmapData = new BitmapData(pic._width, pic._height); bm1.draw(pic); //创建一个与图片大小相同的位图数据类,并把pic所有像素复制进去 pic.onMouseDown = function() { var bm2:BitmapData = new BitmapData(100, 80, true, 0); bm2.copyPixels(bm1, new Rectangle(_xmouse, _ymouse, 100, 80), new Point(0, 0)); //从bm1中复制一块像素到bm2,像素起点是鼠标点击的处,大小为100*80 _root.createEmptyMovieClip("mc", 10); mc.attachBitmap(bm2, 1);  //显示bm2中的位图 mc._x = _xmouse; mc._y = _ymouse; mc._xscale = mc._yscale=150; //放大mc }; _root.onMouseUp = function() {  mc.removeMovieClip(); }; 实例2:卷动图效果[BitmapData. copyPixels()] /UploadTeach/200712/2007120716654445.swf 思路:1、把图片纵向切为num条,并为每条取像素;          2、创建num个影片剪辑,分别存放每条像素;          3、设置每个影片剪辑的X坐标;Y坐标一块比一块高;          4、结合Tween类使每个条都从天上落下。步骤一:  在主场景中放入一位图,保存为影片剪辑,实例名为"pic",放入舞台中;  注意:该位图在pic中的注册点应为左上(0,0),以确保正确显示。步骤二:加入AS代码: import flash.display.BitmapData; import flash.geom.Rectangle; import mx.transitions.Tween; import mx.transitions.easing.*; var num = 80; //把图分成80份 var pW = pic._width/num; //确定每份的宽度为 var pH = pic._height; //因为切成竖条形所以高度不变 var bm1:BitmapData = new BitmapData(pic._width, pic._height); bm1.draw(pic); pic._visible = false; for (i=0; i  var bm2:BitmapData = new BitmapData(pW, pH);  bm2.copyPixels(bm1, new Rectangle(i*pW, 0, pW, pH), new Point(0, 0));  //用i变量*每块宽度,确定取像素的位置  var p:MovieClip = _root.createEmptyMovieClip("mc"+i, i);  p.attachBitmap(bm2, this.getNextHighestDepth());  p._x = i*pW;  //排好X坐标  p._y = -i*pH/5;  //把Y坐标置到舞台上面去,一块比一块高  new Tween(p, "_y", Bounce.easeOut, p._y, 0, (i/10+1), true);  //------------------试替换代码看看效果-------------------  //new Tween(p, "_y", Back.easeInOut, p._y, 0, (i/10+1), true);  //new Tween(p, "_y", Strong.easeIn, p._y, 0, (i/10+1), true);  //new Tween(p, "_y", Elastic.easeOut, p._y, 0, (i/10+1), true) } 实例3:位图填充[BitmapData. beginBitmapFill()] /UploadTeach/200712/2007120716706439.swf 思路: 1、用loadBitmap("id")加载位图,注意:这是个静态方法;           2、创建一个MC,绘出一个与舞台同样大小的矩形,并进行填充。步骤一:       任意导入一张位图,在库中右击该位图->链接->标识符为"pic"。步骤二:加入AS代码: import flash.display.BitmapData; var bm:BitmapData = BitmapData.loadBitmap("pic"); //根据屏幕的大小来绘制绘画区域,用以beginBitmapFill来添充 _root.createEmptyMovieClip("MC", 10); with (MC) {  beginBitmapFill(bm);  moveTo(0, 0);  lineTo(Stage.width, 0);  lineTo(Stage.width, Stage.height);  lineTo(0, Stage.height);  lineTo(0, 0);  endFill(); }  实例4:位图切片[BitmapData. beginBitmapFill()] /UploadTeach/200712/2007120716718306.swf 思路: 1、点击到原图上,进行画圈,并在圈中填充位图;          2、点击在切片上,进行拖动。步骤一:  在主场景中放入一位图,保存为影片剪辑,实例名为”pic”,放入舞台中;注意:该位图在pic中的注册点应为左上(0,0),以确保正确显示。步骤二:加入AS代码: import flash.display.BitmapData; var bm:BitmapData = new BitmapData(pic._width, pic._height); bm.draw(pic); var draw:Boolean = false; pic.onPress = function() {  if (mc.hitTest(_xmouse, _ymouse, true)) {   mc.startDrag();   //如果鼠标在mc上,开始拖动它  } else {   draw = true;   mc = _root.createEmptyMovieClip("mc", 1);   mc.line   mc.beginBitmapFill(bm);   mc.moveTo(_xmouse-this._x, _ymouse-this._y);   //移动起点到此  } }; pic.onMouseMove = function() {  if (draw) {   mc.lineTo(_xmouse-this._x, _ymouse-this._y);   //如果draw状态为真,移动鼠标就draw    } }; pic.onMouseUp = function() {  if (draw) {   draw = false;   mc.endFill();   //填充结束  } else {   mc.stopDrag();  } }; 关于BitmapData类的应用还有很多很多,一句两句还说不完,今后再做介绍。 最后共享一些网络上的相关资料: Flash8.net(闪吧):flash 8 BitmapData类的应用Flash8平铺网页背景webstudio(万博思图):Flash8 BitmapData……
 
 
 
对于初学者十分有用的windows下CVS工具
[ 2008-7-29 13:34:00 | By: 刘涛 ]
 
 对于初学者十分有用的windows下CVS工具……
 
 
 
深入A*算法
[ 2008-7-27 22:02:00 | By: 刘涛 ]
 
A*算法的程序编写原理 我们先来看看最好优先算法是如何编写的吧。   如图有如下的状态空间:(起始位置是A,目标位置是P,字母后的数字表示节点的估价值) ……
 
 
 
AS3文档类中Loading的写法
[ 2008-7-27 21:49:00 | By: 刘涛 ]
 
制作loading最少需要两帧,这是需要注意的地方,了解loading原理的朋友应该知道。第一帧为loading动画。第二帧为你的内容。下面的代码假设flash有两帧:一开始的时候自动停止第一帧,然后进行loading操作,需要显示进度可以在loadProgress里写你需要的操作,加载完后自己跳到第二帧,并停止。注意的是在main函数里,使用了addFrameScript给动画的第二帧添加了stop()代码,这里不是必须的,addFrameScript是一个隐藏函数,这里只是测试一下(ps一下,addFrameScript中,前面是帧数,后面是要加载的函数,帧数是从0开始的)。……
 
 
首页 上一页 下一页 尾页 页次:1/1页  10篇日志/页 转到:
数据载入中,请耐心等待……

时 间 记 忆
数据载入中,请耐心等待……

专 题 分 类
数据载入中,请耐心等待……
用 户 登 录
数据载入中,请耐心等待……

最 新 评 论
数据载入中,请耐心等待……

最 新 日 志
数据载入中,请耐心等待……

最 新 留 言
数据载入中,请耐心等待……

搜 索

友 情 连 接
博 客 信 息
数据载入中,请耐心等待……


 
     
   
Powered by Oblog.