返回列表 回复 发帖

用BitmapData类的 位图飘动

可用遮罩来做位图飘动效果,下面是用BitmapData类来做的。

导入一张图片,连接名设为:51hkj
图片不能太大,否则有点慢。
以下代码放入第一帧:
  1. import flash.display.BitmapData;
  2. import flash.geom.*;
  3. //库里的位图连接名为:51hkj
  4. var my51hkj:BitmapData = BitmapData.loadBitmap("51hkj");
  5. var mcw:Number = my51hkj.width;
  6. var mch:Number = my51hkj.height;

  7. var my51hkj2:BitmapData = new BitmapData(mcw, mch+20, false, 0xFFFFFd);
  8. var mc:MovieClip=this.createEmptyMovieClip("mc", this.getNextHighestDepth())
  9. mc.attachBitmap(my51hkj2, this.getNextHighestDepth());

  10. var n:Number = 8;//振幅,像素
  11. var k:Number = 2*(2*Math.PI/mcw);//周期
  12. var j:Number = 0;

  13. var mRect:Rectangle=new Rectangle(0, 0, 1, mch+20);
  14. var mPoint:Point=new Point(0,0);
  15. this.onEnterFrame = function() {
  16.         j+=1;
  17.         for (var i = 0; i<=mcw; i+=1) {
  18.                 mRect.x=i;
  19.                 mPoint.x=i;
  20.                 mPoint.y=10+n*Math.sin((i+j)*k);
  21.                 my51hkj2.fillRect(mRect,0x00FFFFFd);
  22.                 my51hkj2.copyPixels(my51hkj, mRect, mPoint);
  23.                 //my51hkj2.copyPixels(my51hkj, new Rectangle(i, 0, 1, mch), new Point(i, 10+n*Math.sin((i+j)*k)));
  24.         }       
  25. };
复制代码

位图波动(BitmapData类).swf (3.04 KB)

向大家学习!
不行啦,电脑反应不过来!

[ 本帖最后由 sxl001 于 2006-10-31 13:22 编辑 ]
就是,算法还不是很好,图片要小点。大了就慢。
向大家学习!
AS3.0速度是否就快一些点.
看了你们的讨论不敢下载来试了...
播放flash电脑要好点才行
这种方法怎么可行,用颜色的过渡来控制位图映射 比较好
http://zszen.com/blog

改进了算法,现在用大图片也流畅了。

采用先缓冲,再显示的办法。
  1. import flash.display.BitmapData;
  2. import flash.geom.*;
  3. //库里的位图连接名为:51hkj
  4. var my51hkj:BitmapData = BitmapData.loadBitmap("51hkj");
  5. var mcw:Number = my51hkj.width;
  6. var mch:Number = my51hkj.height;

  7. var n:Number = 15;//振幅,像素
  8. var k:Number = (2*Math.PI/mcw)*1;//*周期
  9. var nn:Number = 10;//缓存个数
  10. var mRect:Rectangle=new Rectangle(0, 0, 1, mch+n*2+4);
  11. var mPoint:Point=new Point(0,0);

  12. var ArrMy51hkj:Array=new Array();
  13. var ArrMc:Array=new Array();
  14. for(var i=0;i<=nn;i++){
  15.         ArrMy51hkj[i] = new BitmapData(mcw, mch+n*2+4, false, 0xFFdddd);
  16.     mc[i]=this.createEmptyMovieClip("mc", this.getNextHighestDepth())
  17.         mc[i].attachBitmap(ArrMy51hkj[i], this.getNextHighestDepth());
  18.         mc[i]._visible=false;
  19.         for (var ii = 0; ii<=mcw; ii+=1) {
  20.                 mRect.x=ii;
  21.                 mPoint.x=ii;
  22.                 mPoint.y=10+n*Math.sin((ii+i*mcw/nn)*k);
  23.                 ArrMy51hkj[i].fillRect(mRect,0x00FFdddd);
  24.                 ArrMy51hkj[i].copyPixels(my51hkj, mRect, mPoint);               
  25.         }       
  26. }
  27. var j:Number = 0;
  28. this.onEnterFrame = function() {
  29.         mc[j]._visible=false;
  30.         if(j==nn){               
  31.                 j=1;
  32.                 mc[j]._visible=true;
  33.         }else{
  34.                 j++;               
  35.                 mc[j]._visible=true;
  36.         }
  37. };
复制代码
[ 本帖最后由 ybzjllj 于 2006-11-1 19:24 编辑 ]
向大家学习!
8楼还是一样提示有个脚本导致运行缓慢
提示有个脚本导致运行缓慢,不理它,
主要主开始生成位图慢一点.以后就好了.
向大家学习!
我感觉很好 就是不知道用在哪些地方!
主要是通过这个实验理解位图类BitmapData的应用。改造后就可用于:
1、红旗飘飘
2、水波
3、位图重构……
位图数据类可以像素级的操作,变色、变形、旋转、置换、真还有点强大哦。
向大家学习!
谢谢,楼主,又学了一手。
返回列表