发新话题
打印

用BitmapData类的 位图飘动

用BitmapData类的 位图飘动

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

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

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

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

var mRect:Rectangle=new Rectangle(0, 0, 1, mch+20);
var mPoint:Point=new Point(0,0);
this.onEnterFrame = function() {
        j+=1;
        for (var i = 0; i<=mcw; i+=1) {
                mRect.x=i;
                mPoint.x=i;
                mPoint.y=10+n*Math.sin((i+j)*k);
                my51hkj2.fillRect(mRect,0x00FFFFFd);
                my51hkj2.copyPixels(my51hkj, mRect, mPoint);
                //my51hkj2.copyPixels(my51hkj, new Rectangle(i, 0, 1, mch), new Point(i, 10+n*Math.sin((i+j)*k)));
        }       
};

附件

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

2006-10-31 20:24, 下载次数: 249

向大家学习!

TOP

不行啦,电脑反应不过来!

[ 本帖最后由 sxl001 于 2006-10-31 13:22 编辑 ]

TOP

就是,算法还不是很好,图片要小点。大了就慢。
向大家学习!

TOP

AS3.0速度是否就快一些点.

TOP

看了你们的讨论不敢下载来试了...
http://steamlin.flash8.net
网站建设/域名、空间租用..www.china-space.cn
蓝莫名博http://www.20click.com/cn/index.php?u=steamlin

TOP

播放flash电脑要好点才行

TOP

这种方法怎么可行,用颜色的过渡来控制位图映射 比较好
54371309[请发送:flash8会员问题]
正在更新中..070815   http://zszen.com

TOP

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

采用先缓冲,再显示的办法。
复制内容到剪贴板
代码:
import flash.display.BitmapData;
import flash.geom.*;
//库里的位图连接名为:51hkj
var my51hkj:BitmapData = BitmapData.loadBitmap("51hkj");
var mcw:Number = my51hkj.width;
var mch:Number = my51hkj.height;

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

var ArrMy51hkj:Array=new Array();
var ArrMc:Array=new Array();
for(var i=0;i<=nn;i++){
        ArrMy51hkj[i] = new BitmapData(mcw, mch+n*2+4, false, 0xFFdddd);
    mc[i]=this.createEmptyMovieClip("mc", this.getNextHighestDepth())
        mc[i].attachBitmap(ArrMy51hkj[i], this.getNextHighestDepth());
        mc[i]._visible=false;
        for (var ii = 0; ii<=mcw; ii+=1) {
                mRect.x=ii;
                mPoint.x=ii;
                mPoint.y=10+n*Math.sin((ii+i*mcw/nn)*k);
                ArrMy51hkj[i].fillRect(mRect,0x00FFdddd);
                ArrMy51hkj[i].copyPixels(my51hkj, mRect, mPoint);               
        }       
}
var j:Number = 0;
this.onEnterFrame = function() {
        mc[j]._visible=false;
        if(j==nn){               
                j=1;
                mc[j]._visible=true;
        }else{
                j++;               
                mc[j]._visible=true;
        }
};
[ 本帖最后由 ybzjllj 于 2006-11-1 19:24 编辑 ]
向大家学习!

TOP

8楼还是一样提示有个脚本导致运行缓慢

TOP

提示有个脚本导致运行缓慢,不理它,
主要主开始生成位图慢一点.以后就好了.
向大家学习!

TOP

我感觉很好 就是不知道用在哪些地方!

TOP

主要是通过这个实验理解位图类BitmapData的应用。改造后就可用于:
1、红旗飘飘
2、水波
3、位图重构……
位图数据类可以像素级的操作,变色、变形、旋转、置换、真还有点强大哦。
向大家学习!

TOP

谢谢,楼主,又学了一手。

TOP

发新话题